Internet Explorer不处理由window.open打开的窗口抛出的任何事件

时间:2016-06-24 12:20:11

标签: javascript jquery html internet-explorer

当我在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然而执行会捕获这两个事件......

这是设计的吗?我错过了什么吗?有没有办法使这项工作?

1 个答案:

答案 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秒的延迟。您可能希望根据需要进行调整。