1 GP
在使用者離開網頁時偷偷存資料
作者:likwueron│2017-02-21 15:04:41│巴幣:2│人氣:245
簡單的js技術,可能沒那麼正規吧。
事實上也沒有那麼偷偷啦,至少我寫這個只是為了把使用者的進度存入伺服器,某方面和巴哈的自動儲存文章類似。(但我從來搞不懂這東西是不是正常的,反正我常常文章丟失)
老實說這篇算是偷偷寫的才會加上偷偷啦(笑)。
首先,無論你是關掉分頁,使用上一頁/下一頁,或更乾脆的把瀏覽器關掉,都會產生一個叫beforeunload的事件。
所以我們要等待這個事件發生,然後植入我們要的動作。
很簡單,但有個小問題:你可能在傳訊途中頁面就整個關掉了。
我用了一個粗糙的方法,加個無窮迴圈,等事情作完後才取消它。
大概長這樣:(使用jQuery)
function savedata() {
$.post('/savedata', data).then() {
beforeunloadLock = false;
});
}
var beforeunloadLock = false;
$(window).on('beforeunload', function() {
savedata();
beforeunloadLock = true;
while(beforeunloadLock) ;
});
可能的問題就是關掉整個瀏覽器的情形吧?
如果可以加個對話框的話會比較保險,但工作要求是這應該儘可能的沉默。
好啦,後來我發現,這能否正常執行全靠運氣...
因為那個while迴圈可能在你的ajax執行前就咬死執行緒。
至於為什麼一開始可以?我想是因為瀏覽器還沒優化js的關係。
最後我只好加一個對話框讓人點。
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3487930
Some rights reserved. 姓名標示-非商業性 2.5 台灣