2013-08-28 40 views
0

我想編寫一個JavaScript代碼,可以在window.onpopstate或window.onload上做任何事情,但不會兩次(請注意,chrome觸發popstate事件同時onload並單擊後退導航按鈕時)在window.onpopstate或window.onload上做些什麼,但從來沒有兩次

我想這是主要的現代瀏覽器(IE10火狐鉻歌劇Safari瀏覽器)

兼容,我寧願不使用任何圖書館 - 甚至沒有jQuery的。

像這樣的東西(但當然正確的語法):

window.onload || window.onpopstate = function(){ 
    window.alert("hello world"); 
} 

感謝

編輯1

與UR建議,我已經試過這樣:

var ranAlready=false; 

window.onload = function(){ 
if (!ranAlready){ 
    window.alert("onload was true"); 
    ranAlready=true; 
} 
}; 

window.onpopstate = function(){ 
if (!ranAlready){ 
    window.alert("popstate was true"); 
    ranAlready=true; 
} 
}; 

但現在我不知道如何設置可變後假.. cuz它依賴於瀏覽器等..

EDIT 2

我需要它的工作一次以上,這是因爲用戶可能會點擊一些Ajax鏈接,等等頁面不會刷新,但URL會改變,因此他可能會點擊後退按鈕。這意味着變量必須在某個時刻重置爲false /但我不知道什麼時候...

+0

使用一個變量來檢查其是否已經運行? – SLaks

+0

這會工作嗎?我感到困惑,因爲我不知道如何控制時間流量,就像,該變量將採取值之前或之後,或在同一時間,即時通訊檢查..? – fartagaintuxedo

+0

以及如何將其設置回false ..? – fartagaintuxedo

回答

2

問題是,在Chrome中,「popstate」事件在頁面加載時觸發,所以處理程序將運行兩次。您可以通過在popstate上運行時檢查歷史記錄狀態來檢查它是否在初始加載時運行來解決此問題。

function showAlert() { 
    window.alert("hello world"); 
} 
function showAlertOnPopState(){ 
    if (window.history.state == null){ // This means it's page load 
     return; 
    } 
    showAlert(); 
} 

window.onload = showAlert; 
window.onpopstate = showAlertOnPopState; 

小提琴:http://jsfiddle.net/ER8zC/2/

找到了history.state伎倆在這裏:Popstate on page's load in Chrome

+0

這是一個語法錯誤'window.onload || window.onpopstate = function(){' – fartagaintuxedo

+0

已更新的答案。我假定你的原始語法是有效的。 – htxryan

+0

謝謝,另請參閱我的編輯,我該如何將變量設置回false? – fartagaintuxedo

相關問題