移動端檢測微信瀏覽器返回,關閉,進入後臺操做

背景:最近作一個倒計時記錄學習時長項目,須要在用戶點擊瀏覽器的返回按鈕或者直接關閉瀏覽器,或者直接退出微信或者進入後臺時記錄下當前頁面的進度,下次進去從上次退出的地方開始倒計時。一開始想的很簡單直接監測瀏覽器的返回事件window.onbeforeunload,在安卓和pc上能夠監測到,可是iOS上監測不到ios

解決辦法:根據百度相關文檔,發現iOS端檢測須要用pagehide去檢測,因而修改代碼以下web

var u = navigator.userAgent;
            var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //g
            var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端

 if (isAndroid) {
                                //這個是安卓操做系統
                                window.onbeforeunload = function () {
                                    //窗口關閉前
                                   ...暫停倒計時而且ajax請求記錄到數據庫
                                };
                            } else if (isIOS) {
                                //這個是ios操做系統
                                window.addEventListener('pagehide', function () {
                                           ...暫停倒計時而且ajax請求記錄到數據庫
                                });
                            } else {
                                //這個pc
                                window.onbeforeunload = function () {
                                    //窗口關閉前
                                    c      ...暫停倒計時而且ajax請求記錄到數據庫
                                };
                            }

調試是打斷點iOS仍是沒法監測到,當時鬱悶了很長時間,蘋果官方文檔明明寫了用這個能監測到,可是我竟然監測不到,一度覺得是系統版本低,升級到最新系統發現仍是監測不到pagehide,沒法記錄數據到數據庫,最後翻遍百度在一個帖子的不起眼的評論裏看到了一句話說把ajax請求改爲同步試試,我抱着試試的態度修改了代碼ajax

 //這個是ios操做系統
                                window.addEventListener('pagehide', function () {
                                    $.ajaxSetup({
                                        async: false//關閉異步
                                    });
                                    ...ajax請求記錄數據到數據庫
                                });
                                window.addEventListener('pageshow', function () {
                                    $.ajaxSetup({
                                        async: true//頁面顯示時恢復異步
                                    });
                                });

發佈測試竟然監測到了,鬱悶已久的問題終於解決了,雖然不知道什麼緣由,可是解決了就是好事數據庫

監測瀏覽器返回、關閉、退出、進入後臺完整代碼瀏覽器

if (isAndroid) {
                                //這個是安卓操做系統
                                window.onbeforeunload = function () {
                                    //窗口關閉前
                                    ...ajax操做
                                };
                            } else if (isIOS) {
                                //這個是ios操做系統
                                window.addEventListener('pagehide', function () {
                                    $.ajaxSetup({
                                        async: false
                                    });
                                   ...ajax操做
                                });
                                window.addEventListener('pageshow', function () {
                                    $.ajaxSetup({
                                        async: true
                                    });
                                });
                            } else {
                                //這個pc
                                window.onbeforeunload = function () {
                                    //窗口關閉前
                                    ...ajax操做
                                };
                            }

                            //window.onunload = function () {
                            //    //窗口關閉後
                            ...ajax操做
                            //};
                            window.addEventListener("popstate", function (e) {
                              ...ajax操做
                            }, false);
                            if (typeof document.hidden !== "undefined") {
                                hidden = "hidden";
                                visibilityChange = "visibilitychange";
                            } else if (typeof document.mozHidden !== "undefined") {
                                hidden = "mozHidden";
                                visibilityChange = "mozvisibilitychange";
                            } else if (typeof document.msHidden !== "undefined") {
                                hidden = "msHidden";
                                visibilityChange = "msvisibilitychange";
                            } else if (typeof document.webkitHidden !== "undefined") {
                                hidden = "webkitHidden";
                                visibilityChange = "webkitvisibilitychange";
                            }
                            document.addEventListener(visibilityChange, function () {
                                console.log("當前頁面是否被隱藏:" + document[hidden]);
                                if (document[hidden]) {//頁面被隱藏,進入後臺運行時監測
                                    ...ajax操做
                                }
                                else {
                                    ...頁面從新進入前臺時操做,好比恢復倒計時
                                }
                            }, false);
相關文章
相關標籤/搜索