我尽可能地简化了我的问题。它只发生在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完全抛弃了我,我完全不知道什么是错的。
答案 0 :(得分:3)
据我所知,这是这个问题的一个症状:Using Javascript objects across separate windows in IE
基本上,无论我如何将ko对象传递给子窗口,某些都丢失了,当我尝试应用绑定时,ko本身遇到了DOM跟踪错误,并试图插入一些东西到某个地方它不应该(可能是子DOM的父DOM的一部分)。
解决方案有两个方面:
可怕的行为,IE ......
如果有人能够提出关于为什么会发生这种情况的实际解释,我会接受他的回答。