[英]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.