簡體   English   中英

Internet Explorer不處理由window.open打開的窗口拋出的任何事件

[英]Internet Explorer not handling any event thrown by window opened with window.open

當我在一個帶有window.open的新窗口/選項卡中打開來自同一域的簡單HTML頁面(因此這里沒有跨域關注)時:

var mywindow = window.open('<html page on same domain>');

然后下面的代碼,根據文檔甚至<IE9兼容

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頁面上拋出自定義事件:

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 確實捕獲了這兩個事件......

這是設計的嗎? 我錯過了什么嗎? 有沒有辦法使這項工作?

顯然,在我能夠將處理程序附加到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秒的延遲。 您可能希望根據需要進行調整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM