2013-08-09 25 views
6

Tôi đã đơn giản hóa vấn đề của mình càng nhiều càng tốt. Nó chỉ xảy ra trong Internet Explorer (9 và 10 xác nhận). Tôi có một trang trả lại với điều này:IE 10 + KnockoutJS = HierarchyRequestError?

<html> 
<body> 

    <span data-bind="text:$data[0].Mileage"></span> 
    <script type="text/javascript"> 
     window.initChild = function (ko, viewModel) { 
      window.ko = ko; 
      ko.applyBindings(viewModel, document.body); 
     } 
    </script> 
</body> 
</html> 

My SPA gọi

var otherWindow = window.open('myurl', '_blank'); 
    var handler = function() { 
     otherWindow.initChild(ko, report); 
    }; 
    if (otherWindow.addEventListener) { 
     otherWindow.addEventListener('load', handler, false); 
    } else if (otherWindow.attachEvent) { 
     otherWindow.attachEvent('onload', handler); 
    } 

Tôi đã kiểm tra, dữ liệu đến trong phương pháp initChild Allright.

Nếu tôi ràng buộc bất kỳ điều gì trên trang, tôi nhận được HierarchyRequestError về cuộc gọi applyBindings. Google-fu của tôi hoàn toàn bỏ rơi tôi về điều này, tôi hoàn toàn không biết gì là sai.

+0

Trình duyệt IE được gắn thẻ. Điều này có xảy ra trong các trình duyệt khác không? – Amy

+0

không, không. Mã (và đó là bản gốc, phức tạp hơn đối tác) hoạt động tốt trong FF và Chrome. – TDaver

+0

'$ data [0] .Mileage' có vẻ như không chắc rằng viewmodel của bạn là một mảng. – Tyrsius

Trả lời

3

Theo như tôi có thể nói, đó là một triệu chứng của vấn đề này: Using Javascript objects across separate windows in IE

về cơ bản, bất kể CÁCH tôi thông qua các đối tượng ko phải cửa sổ con, một cái gì đó đã bị mất, và khi tôi đã cố gắng áp dụng bindings, ko tự nó chạy vào một lỗi theo dõi DOM, và cố gắng để chèn một cái gì đó đến một nơi nào đó nó không nên có (có thể là một phần của DOM mẹ DOM con).

Giải pháp là hai lần:

  • Thêm các kịch bản ko (và ko.mapping) vào cửa sổ con, để có nó là riêng đối tượng ko
  • serialize các mô hình với ko.mapping để JSON , vượt qua chuỗi vào cửa sổ con và deserialize nó.

hành vi Horrible, IE ...

Nếu bất cứ ai có thể đưa ra một lời giải thích thực tế trên WHY này đã xảy ra, tôi sẽ chấp nhận câu trả lời của mình để thay thế.

Các vấn đề liên quan