我在IE11中工作

我有一个代码,可以打开一个新窗口,并在新窗口上为加载事件添加一个eventListener。

var newWindow = window.open(someURL, ..., ...);
newWindow.addEventListener('load', callback, true);
// when IE11 executes this line, it throws error "object doesn't support  property or method".


当我将调试器打开到问题所在的行时,newWindow对象的方法列表中列出了addEventListener方法。

有人可以建议或解释IE11中行为的可能原因。

有些研究 -
我发现了一个问题,其中newWindow不允许您将appendChild与父窗口的元素一起使用。
appendChild not working with window.open in IE

相似的事情会成为问题吗?

最佳答案

我在最近的一个项目中遇到了这个问题。看来IE需要一点时间来正确初始化新窗口,并且新窗口对象在打开后还没有addEventListener方法。只有IE才能做到;我无法在任何其他浏览器中观察到此行为。我还可以确认newWindow.onload几乎没有用。

这是我的解决方法:

var newWindow = window.open();

// wait until addEventListener method is available to window
var windowInitialized = false;
while (windowInitialized === false) {
    if (typeof newWindow.addEventListener === 'function') {
        windowInitialized = true;
    }
}

// from here on you can safely use newWindow.addEventListener

10-07 21:26