2012-12-11 133 views
16

基本上我想要做的是什麼東西,這樣做的效果:有沒有辦法在改變window.location.href之後進行onload回調?

window.location.href = "some_location"; 
window.onload = function() { 
    alert("I'm the new location and I'm loaded!"); 
}; 

有什麼辦法加載窗口的新位置時,有一個回調? (上面的代碼不起作用。)

+1

更改'location.href'會導致當前頁面關閉並打開一個新頁面,因此在加載新頁面時無法觸發舊頁面上的任何事件 – qwertymk

回答

15

不,你不能按照你想要的方式去做。加載新頁面將關閉當前文檔並開始加載新文檔。當新文件開始加載時,當前文檔中的任何代碼將不再處於活動狀態。

要在加載新文檔時擁有事件處理函數,您需要將代碼插入到新頁面的文檔中,或者將新文檔加載到iframe中並監視從當前文檔加載iframe。

+1

如果窗口是新窗口,該怎麼辦: var w = window.open(「」); w.location.href =「some_location」; w.onload = function(){alert(「Hi!」);}; 假設我需要使用重定向的實際原因,而不是直接打開URL,就像我需要重定向請求的響應或其他東西。那麼有什麼辦法嗎? – Lukas

+2

@Lukas - 如果您打開一個新窗口(與框架相同),如果窗口位於不同的域上,並且無法在該窗口中設置事件處理程序,則存在安全限制。如果你的窗口在同一個域上,你應該能夠爲它設置一個onload處理程序。 – jfriend00

+0

嗯...檢查出http://jsfiddle.net/42hKC/ - 我在同一個域內打開一個新窗口,將一個onload附加到新窗口,並且它不會觸發。 – Lukas

2

將window.location.href設置爲一個新值可以讓瀏覽器直接進入下一頁。

像這樣:

window.location.href = "http://www.google.com/"; 

一旦瀏覽器進入到google.com,就是這樣,你的Javascript不再執行,並沒有辦法讓你有任何形式的回調,因爲瀏覽器不再運行你的頁面。

所以,答案是否定的。

+0

錯了。我的Javascript仍在運行 - 在控制更新窗口的原始窗口中。 – 7vujy0f0hy

相關問題