微信端返回按鈕監(jiān)聽處理

微信端監(jiān)聽‘返回’事件

下面的方法是在移動端實現(xiàn)的,在微信的瀏覽器中beforeunload等是被閹割掉的,所以用不了。
而下面的方法存在的問題是:當前頁面通過點擊事件進入下級頁面后,再返回到當前頁會直接觸發(fā)popstate事件,也就意味著會直接彈出confirm,并且當你點擊‘確認’的時候,需要點擊多次才能返回。出現(xiàn)這兩個問題的原因是:
1、popstate事件不可被移除,當你從子頁面返回的時候,popstate會被觸發(fā)(ios并不會刷頁面),并且執(zhí)行
2、子頁面返回會往history棧中添加一條歷史記錄,所以在返回的時候不會跳轉(zhuǎn)回去,并且因為當前頁面重寫了pushState,所以會出現(xiàn)停留在當前頁

因此,這邊進行的處理就是在頁面加載后直接進行window.location.back();同時,對事件的執(zhí)行進行延遲

// 判斷點擊左上角返回
$(document).ready(function (e) {
// 最好寫在頁面加載請求的接口中
if(window.location.hash === '#hash'){
    window.history.back();
}
pushHistory();

let bool = false;
setTimeout(function () {
    bool = true;
}, 1500);
    window.addEventListener('popstate', function (e) {
       if(bool) {
            var cfi = confirm("確定要離開當前頁面嘛?");
            if(cfi) {
                window.history.back();
            }else{
                document.write("You pressed cancel!")
            }
        }
    }, false);
    function pushHistory () {
        let state = {
            title: 'title',
            url: '#'
        };
        window.history.pushState(state, 'title', '#');
    }
});

附上,popstate是h5新出的api,還有用于監(jiān)聽hash的api叫hashchange,就是監(jiān)聽跟在#符號后面的URL部分,包括#符號變化,但是hashchange不管是back,還是forward都會觸發(fā)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容