2017-03-23 41 views
0

如何捕捉刷新按鈕(f5)?我有一個任務,包括幾個部分:
- 當我刷新(反正這個動作) - 我必須清除我的localStorage;
- 如果更改url或關閉頁面 - localStorage必須保存他的狀況。
我發現了幾個topict連接這樣的問題。主要結論是使用window.onbeforeunload,但同時,此事件隨時觸發(不僅在刷新頁面時,即使您更改了url/ctrl + shift + r/f5/ctrl + r等....)。
我們有什麼方法只捕捉刷新事件嗎?例如:與url進行比較的一些方法(當前和哪個用戶想要打開,如果它們是相同的 - 刷新)?如何在不捕捉關閉事件或更改url事件的情況下捕獲僅刷新事件?

+0

HTTP:/ /stackoverflow.com/questions/18457797/how-to-know-whether-refresh-button-or-browser-back-button-is-clicked-in-firefox 是否有幫助? –

+0

[在瀏覽器中檢測返回按鈕單擊]的可能的重複(http://stackoverflow.com/questions/6359327/detect-back-button-click-in-browser) – CodeMonkey

+0

不,我讀了這個,但溶劑沒有幫助我。主要原因是它包含一個beforeunload事件,女巫抓住所有事件。在我的身邊,我只需要f5或刷新按鈕。 –

回答

0

你想要的是不可能的。刷新操作不可捕捉。 但是你可以實現這個變通方法,行爲:

if(self.window.name.indexOf("justAwordToNowisYourWindow")!=0){ 
self.window.name = "justAwordToNowisYourWindow"; 
alert("first Load"); 
}else{ 
    alert("reload"); 
} 

此外,作爲一個很好的做法,使用時間戳來防止怪異的行爲,如果你的應用程序的多個窗口被打開:

var n = Date.now(); 
if(self.window.name.indexOf("justAwordToNowisYourWindow")!=0) 
{ 
self.window.name = "justAwordToNowisYourWindow"+n; 
alert("first Load"); 
}else{ 
    alert("reload"); 
} 
+0

我在想這個,但在我的版本中,我需要從beforeunload事件返回一些值。我怎麼理解,我們不能這樣做?還是它對我在卸載之前工作的誤解?如果只有我可以捕獲返回值,所有將更容易))) –

+0

您可以使用窗口的名稱和您需要返回的值在before unload事件中創建一個cookie。關於業務規則的更多細節我們可以解決它。 –