2012-01-09 67 views
1

考慮這種情況下:onload事件不會觸發一次以上的子窗口

var openWindow = function (name) { 
    var win = window.open("/", name); 

    document.write("Opening window: " + name + "<br />"); 
    win.onload = function() { 
     document.write("Opened window: " + name + "<br />"); 
    }; 
}; 

var openAsdf = openWindow.bind(null, "asdf"); 
openAsdf(); 
setTimeout(openAsdf, 3000); 

(見本jsfiddle

三秒之前,請不要關閉窗口了。您會注意到第二個加載事件未被調用(即使窗口中的頁面似乎刷新了)。爲什麼不?我怎樣才能確定現有窗口何時刷新或再次被調用?

+1

彈出成功阻止 – Ibu 2012-01-09 21:58:17

+0

你的jsfiddle嘗試調用'win.onload =函數(){'時拋出一個JavaScript錯誤。 – 2012-01-09 21:59:07

+0

你使用什麼瀏覽器?在Chrome 16中沒有錯誤。 – benekastah 2012-01-09 22:02:32

回答

0

連接您的onload事件之前,您打開窗口。到它打開的時候,它可能已經被解僱了。

參見:Add onload function to an opening window

+0

我不明白這是怎麼可能的......我沒有'win'變量,直到我調用'window.open',所以我不能設置它的'onload'屬性,直到那時。但無論如何,順序並不重要,因爲瀏覽器中的JavaScript執行是單線程的。至少在函數退出之前窗口不可能完成加載。 – benekastah 2012-01-09 22:04:42

+0

查看我上面的編輯。 – 2012-01-09 22:06:54

+0

[已更新jsfiddle](http://jsfiddle.net/eGnfp/23/)嘗試此建議。在這種情況下,這兩個處理程序都不會被調用。看起來,當窗口的位置改變時,'window.onload'屬性會在新位置加載時被覆蓋。 – benekastah 2012-01-09 22:16:47