IE 10 + KnockoutJS = HierarchyRequestError?

时间:2013-08-09 15:43:08

标签: javascript internet-explorer knockout.js

我尽可能地简化了我的问题。它只发生在Internet Explorer中(已确认9和10)。我有一个用这个呈现的页面:

<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>

我的SPA致电

    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);
    }

我检查过,数据到达initChild方法好吧。

如果我在页面上绑定ANYTHING,我会在applyBindings调用上得到HierarchyRequestError。我的google-fu完全抛弃了我,我完全不知道什么是错的。

1 个答案:

答案 0 :(得分:3)

据我所知,这是这个问题的一个症状:Using Javascript objects across separate windows in IE

基本上,无论我如何将ko对象传递给子窗口,某些都丢失了,当我尝试应用绑定时,ko本身遇到了DOM跟踪错误,并试图插入一些东西到某个地方它不应该(可能是子DOM的父DOM的一部分)。

解决方案有两个方面:

  • 将ko(和ko.mapping)脚本添加到子窗口,以拥有它自己的ko对象
  • 使用ko.mapping将模型序列化为JSON,将字符串传递给子窗口并反序列化。

可怕的行为,IE ......

如果有人能够提出关于为什么会发生这种情况的实际解释,我会接受他的回答。