Javascript IE 10+;KnockoutJS=HierarchyRequestError?

Javascript IE 10+;KnockoutJS=HierarchyRequestError?,javascript,internet-explorer,knockout.js,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) {

我已经尽可能地简化了我的问题。它只发生在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>
我检查过了,数据正确地到达了
initChild
方法


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

据我所知,这是这个问题的一个症状:

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

解决方案有两个方面:

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


如果有人能对发生这种情况的原因给出一个实际的解释,我会接受他的答案。

这是标记的IE。在其他浏览器中不会发生这种情况吗?不,不会。代码(以及它的原始、更复杂的对应项)在FF和Chrome中运行良好。
$data[0]。里程数
您的viewmodel不太可能是一个数组。这不是一个好主意。当您这样做时,
$root
$parent
上下文将令人困惑,我相信您将遇到其他问题。创建一个viewmodel对象,并给它一个数组属性。@Tyrsius:父页面的viewmodel是这样的,这里我只是列出子窗口中的项目。谢谢你指出设计上的缺陷,我以后会注意的。当然,在这种情况下,这是爆炸中的一件好事:)
    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);
    }