当我在window.open的新窗口/标签页面中打开来自同一域的简单HTML页面时(这里没有跨域关注):
var mywindow = window.open('<html page on same domain>');
然后根据docs的以下代码是&lt; IE9 compatible
if (mywindow.addEventListener) {
mywindow.addEventListener('load', function () {
console.log('load event fired');
}, false);
} else if (mywindow.attachEvent) {
mywindow.attachEvent('onload', function () {
console.log('load event fired');
});
}
不会捕获抛出的事件(在IE11和IE Edge中测试)。即使我在HTML页面the old fashioned way上抛出自定义事件:
var event = document.createEvent('Event');
event.initEvent('customEvent', true, true);
window.dispatchEvent(event);
它没有被抓住......还有jQuery,没有成功:
$(mywindow).on("customEvent", function () {
console.log('custom event fired');
});
Chrome和Firefox然而执行会捕获这两个事件......
这是设计的吗?我错过了什么吗?有没有办法使这项工作?
答案 0 :(得分:0)
显然,在我能够将处理程序附加到load事件之前,页面已经加载了。
我设法通过在页面上的窗口onload处理程序中触发延迟的自定义事件来解决此问题(感谢@CBroe),使用window.open打开。
<script>
window.onload = function() {
setTimeout(function() {
var event = document.createEvent('Event');
event.initEvent('customEvent', true, true);
window.dispatchEvent(event);
}, 1000);
};
</script>
这样我确定窗口已完全加载(它在window.onload中被触发),但是没有触发太快将附加处理程序附加到此自定义事件。
任意选择1秒的延迟。您可能希望根据需要进行调整。