Javascript Internet Explorer不处理使用window.open打开的窗口引发的任何事件

Javascript Internet Explorer不处理使用window.open打开的窗口引发的任何事件,javascript,jquery,html,internet-explorer,Javascript,Jquery,Html,Internet Explorer,当我在一个新窗口/选项卡中打开来自同一域的简单HTML页面(因此这里没有跨域问题)时,使用: 不捕获抛出的事件(在IE11和IE Edge中测试)。即使我在HTML页面上抛出自定义事件: 它没有被抓住。。。同样使用jQuery,也没有成功: $(mywindow).on("customEvent", function () { console.log('custom event fired'); }); 然而,Chrome和Firefox确实捕捉到了这两个事件 这是故意的吗?我错过什么

当我在一个新窗口/选项卡中打开来自同一域的简单HTML页面(因此这里没有跨域问题)时,使用:

不捕获抛出的事件(在IE11和IE Edge中测试)。即使我在HTML页面上抛出自定义事件:

它没有被抓住。。。同样使用jQuery,也没有成功:

$(mywindow).on("customEvent", function () {
    console.log('custom event fired');
});
然而,Chrome和Firefox确实捕捉到了这两个事件


这是故意的吗?我错过什么了吗?有什么办法可以让它工作吗?

显然,在我能够将处理程序附加到加载事件之前,页面已经加载了

我设法解决了这个问题(感谢@CBroe),方法是在页面上用window.open打开的window onload处理程序中触发一个延迟的自定义事件

<script>
window.onload = function() {
    setTimeout(function() {
        var event = document.createEvent('Event');
        event.initEvent('customEvent', true, true);
        window.dispatchEvent(event);
    }, 1000);
};
</script>

window.onload=函数(){
setTimeout(函数(){
var event=document.createEvent('event');
initEvent('customEvent',true,true);
窗口。dispatchEvent(事件);
}, 1000);
};
通过这种方式,我可以确定窗口已完全加载(在window.onload中触发),但对于将处理程序附加到此自定义事件而言,不会触发得太快


延迟1秒是任意选择的。您可能需要根据自己的需要进行调整。

显然,在我能够将处理程序附加到加载事件之前,页面已经加载了

我设法解决了这个问题(感谢@CBroe),方法是在页面上用window.open打开的window onload处理程序中触发一个延迟的自定义事件

<script>
window.onload = function() {
    setTimeout(function() {
        var event = document.createEvent('Event');
        event.initEvent('customEvent', true, true);
        window.dispatchEvent(event);
    }, 1000);
};
</script>

window.onload=函数(){
setTimeout(函数(){
var event=document.createEvent('event');
initEvent('customEvent',true,true);
窗口。dispatchEvent(事件);
}, 1000);
};
通过这种方式,我可以确定窗口已完全加载(在window.onload中触发),但对于将处理程序附加到此自定义事件而言,不会触发得太快


延迟1秒是任意选择的。您可能需要根据自己的需要调整此设置。

您想实现什么目标?至于可能的“解决方案”/“变通方法”-如果您手动将HTML写入弹出窗口,那么您最好在其中包含事件处理程序代码,例如…@CBroe我正试图打开一个HTML页面作为打印模板。这是一个干净的页面,里面有引导参考和一些打印样式。我尝试在其中设置一些生成的HTML以进行打印。在Chrome和FF中效果很好,但在IE中没有。然后我发现根本没有触发任何事件。在这种情况下,你需要加载事件做什么?(如果要在加载所有内容后自动调用
print
方法,就像我说的那样,我只需在弹出窗口中这样做。)我需要加载事件来设置html页面中的内容。我使用此页面作为模板。当我删除加载事件并立即设置内容时,奇怪的是,它对IE来说已经足够有效了,但对Chrome和FF来说却没有(如预期的那样)。它找不到填充内容的div。html是异步加载的,所以我假设您必须等待html加载后才能设置一些内容,对吗?您不能先加载模板并用主页中的数据填充它,然后将完整的html(包括已插入的数据)写入弹出窗口?您试图实现什么?至于可能的“解决方案”/“变通方法”-如果您手动将HTML写入弹出窗口,那么您最好在其中包含事件处理程序代码,例如…@CBroe我正试图打开一个HTML页面作为打印模板。这是一个干净的页面,里面有引导参考和一些打印样式。我尝试在其中设置一些生成的HTML以进行打印。在Chrome和FF中效果很好,但在IE中没有。然后我发现根本没有触发任何事件。在这种情况下,你需要加载事件做什么?(如果要在加载所有内容后自动调用
print
方法,就像我说的那样,我只需在弹出窗口中这样做。)我需要加载事件来设置html页面中的内容。我使用此页面作为模板。当我删除加载事件并立即设置内容时,奇怪的是,它对IE来说已经足够有效了,但对Chrome和FF来说却没有(如预期的那样)。它找不到填充内容的div。html是异步加载的,所以我假设您必须等待html加载后才能设置一些内容,对吗?您不能先加载模板并在主页中填充数据,然后将完整的html(包括已插入的数据)写入弹出窗口吗?
$(mywindow).on("customEvent", function () {
    console.log('custom event fired');
});
<script>
window.onload = function() {
    setTimeout(function() {
        var event = document.createEvent('Event');
        event.initEvent('customEvent', true, true);
        window.dispatchEvent(event);
    }, 1000);
};
</script>