2016-07-01 48 views
-1

即使窗口關閉,是否可以繼續使用JavaScript計時器? 我可以用本地存儲以某種方式保存這些東西嗎?如何在窗口關閉時使計時器保持打勾狀態

任何人都可以請解釋我將如何做到這一點?

例如:

當有人推我的網站上一個按鈕,我想使這個按鈕,一個小時關閉。

setTimeOut(func, 1000 * 60 * 60); 

現在,當我離開頁面時,計時器當然會停止。但是,如果有人離開實際頁面,我希望它繼續滴答滴答。

+1

這沒有多大意義,這樣解釋。你想達到什麼目的? – AlexG

+0

您可以使用'localStorage'在每次更新時保存計時器的當前值,然後在下一次重新打開頁面時讀取該值,並根據當前時間進行一些調整。但是當頁面關閉的時候,你不能繼續更新 - 關閉頁面/窗口後,用戶可能會退出瀏覽器,或者關閉他們的電腦,或者... – nnnnnn

回答

0

取決於你想要做什麼,有新的Service Worker API即使在關閉標籤後仍然可以執行任務。只需說瀏覽器支持僅適用於現代瀏覽器。

請注意,在用戶關閉標籤後運行代碼通常會破壞與用戶的合同。 「當我關閉標籤頁時,我不想再與你進行任何交互」,因此在嘗試註冊服務工作者之前,請確保將其傳達給用戶。

1

當用戶在localStorage中按下按鈕時,存儲時間戳(+ new Date或Date.now)。在頁面加載時立即閱讀它,如果Date.now() - timestampInLocalStorage爲正值,則立即setTimeout(enableButton,delta)else enableButton。

請注意,用戶可以修補當地時間繞過這種保護當然。

+0

好的我會研究一下這個。謝謝 – user3683991

0

去追加馬達拉所說的答案,因爲我還不能評論。

有些瀏覽器會讓你通過Service Work API執行此操作,但是有一些瀏覽器在Chrome等休眠選項卡處於休眠狀態時已開始「休眠」。 Chrome在一小段時間外放置一個非活動標籤進入休眠狀態。所以即使你在他們離開前啓動一個計數器,然後以某種方式檢測到他們離開計數器也不準確。正因爲如此,如果不通過黑客行爲就很難在所有瀏覽器上都能正常工作。

所以這是合理的......但你真的不應該這樣做。你會花太多時間尋找解決方法。現實情況是,爲了防止這種情況符合用戶的最佳利益,所以您將自己與瀏覽器對抗。

相關問題