Javascript onload 在 IE11 中不触发

Javascript onload not firing in IE11

我正在使用以下方法创建一个新的 window:

var windowX = window.open('page.html', 'newWindow', 'width=600,height=600');    

新的 window 只是一个包含 javascript 的空白 html 页面,它构建了一个新对象,然后我将该对象与更多 javascript 一起使用在页面加载后注入。

我的解决方案适用于 chrome 和 firefox,但似乎不适用于 IE11。警报不显示,以下代码也不显示。

windowX.onload = function() {
    //I've added the alert just to see if the onload is firing...
    windowX.alert('hello!');
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.language = 'JavaScript';
    script.src = '/scripts/newScript.js';
    windowX.document.head.appendChild(script);
};

我尝试使用 jQuery $(windowX).ready(...) & $(windowX).load(...),它在 chrome 中仍然有效,但在 IE11 中没有成功。

没关系 - 您不能使用未完成对象的属性 ("Unable to set property 'onload' of undefined or null reference"),但此代码在 IE11 中有效(不需要加载空页面):

var windowX = window.open('');
windowX.alert('hello!');
var script = windowX.document.createElement('script');
script.type = 'text/javascript';
script.language = 'JavaScript';
script.src = '/scripts/newScript.js';
windowX.document.head.appendChild(script);

但你是对的,这 2 个浏览器在加载期间显示它们(例如 window.name 在 IE 中不存在,但在这两个中存在)。

我发现问题是 IE11 将 window.open() 作为同步任务运行,阻止 运行 进一步 javascript,直到 window 打开并加载,所以之后声明的 onload 事件永远不会被触发,因为新的 window 已经 'loaded'.

为了解决这个问题,我检查用户浏览器是否为 IE11 并使用 jquery:

触发加载事件
if (!!window.MSInputMethodContext && !!document.documentMode) {
    $(windowX).trigger('load');
}