2014-10-27 21 views
1

有沒有什麼辦法來檢測Javascript中的刷新? 我在網上看了一些東西。非常複雜的事情,如會話cookie ClientX/ClientY。沒有發現什麼,只是一個大複雜的混亂... 然後,我認爲一些onload,代碼總是在頁面加載時執行。 因此,它也將在重新加載時執行但是,只有當頁面重新加載時纔會執行代碼,而不是僅在加載時執行。 當您使用onunload時,onunload內的代碼將在關閉窗口,退格和刷新時執行。Javascript - 檢測刷新 - onload和onunload - 你可以使用它們來檢測刷新嗎?

  1. 的onload
    • 加載頁面
    • 刷新
    • 其他?
  2. onunload的
    • 關閉瀏覽器
    • 刷新
    • 退格

正如你可以看到,當我使用onload事件,它會加載頁面等。隨着onunload的它會在關閉瀏覽器刷新等時做些事情。 是否有可能只在兩個事件(onload和onunload)是否被觸發? PS:我可能是完全錯誤的,但我只是有這個想法,它/它可以工作嗎?

+1

我對此表示懷疑 - 重載頁面的OnLoad事件將會運行'新鮮',無法訪問任何您的OnUnLoad事件可以保存的內容,而不會在頁面之間持續存在任何內容,如Cookie – n8wrl 2014-10-27 20:05:05

+1

我傾向於認爲如果您依賴於瀏覽器行爲像onunload和刷新,你做錯了(TM)。在一般情況下這太不可靠了。例如,如果用戶的瀏覽器崩潰,onunload將永遠不會被調用。 – mellamokb 2014-10-27 20:07:16

+0

@ n8wrl如果你先onunload並在onunload中觸發onload?那麼它能工作嗎? – 2014-10-27 20:07:29

回答

3

不要依賴onbeforeunload事件;使用onload事件和localStorage/sessionStorage

var visited = false; 
window.onload = function() { 
    if (localStorage["visited"] === true) { 
     visited = true; 
    } 
    localStorage["visited"] = true; 
    /* change `local` to `session` if you want 
     this behavior to stay for the present session only */ 
    return; 
} 

這在HTML5的localStorage系統的客戶端添加了一個標誌。在頁面重新加載/瀏覽器崩潰/選項卡關閉之後,這將被保留 - 重新打開。

代碼的基本功能是查看該標記是否已設置。如果設置,則表示用戶以前訪問過該頁面。然後我們設置一個名爲visited的全局變量爲true。你可以在你的代碼中檢查這個變量,如果它是真的,那麼停止腳本的執行。

if (visited === true) { 
    return false; //return breaks out of your function 
} 

您可能希望將代碼包裝在單個IIFE中,只有在此變量是虛假的情況下才會執行該代碼。

!visited && (function() { 
    //your code here 
})(); 

這個方法(或任何方法,爲此事)是騙不了證明。僅將此用於更好地體驗用戶體驗,而不是防止惡意活動。任何用戶都可以輕鬆清除或編輯localStorage DATA。

+0

你打算如何告訴「訪問」來自「visited」的刷新,以及幾天後再次訪問該網站? – n8wrl 2014-10-28 12:52:56