6

我已经尽可能地简化了我的问题。它只发生在 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方法没问题。

如果我在页面上绑定任何东西,我会HierarchyRequestError在 applyBindings 调用中得到一个。我的 google-fu 完全抛弃了我,我完全不知道出了什么问题。

4

1 回答 1

3

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

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

解决方案有两个:

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

可怕的行为,IE...

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

于 2013-08-12T09:19:10.437 回答