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');
}
我正在使用以下方法创建一个新的 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');
}