微信端監(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ā)。