點選返回按鈕只能返回某一個 明確的頁面(主要是處理 ios 中 web的)
阿新 • • 發佈:2018-12-19
非 ios 下面的一般程式碼如下
pc 端或者 android webview沒有問題, 但是 ios 有問題
history.pushState(null, null, document.URL);
window.onpopstate = function () {
window.location.href = './A.html';
}
需要做的就是將如下 listenerBackHandler 對應的程式碼copy 進返回的頁面
程式碼展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset ="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>B page</title>
</head>
<!-- <body onload="myonload()" onpageshow="mypageshowcode()"> -->
<body>
i am B page < br>
當前頁面只能返回到 A page
<a href="./C.html">跳轉到c 頁面</a>
<br>
<ol>
<li>popstate 一般需要當前 document 中存在兩個 url(pushstate)+ 通過 back or forward 來觸發</li>
<li> chrome 中 只在當前頁面back or forward 觸發</li>
<li> 微信ios 中 進入和離開當前頁面都會觸發 popstate 事件, 如下案例中 一般會出現 返回的時候跳過 B page</ li>
</ol>
<script>
var listenerBackHandler = { // 在返回首頁的時候會有 1s 的bug
param: {
isRun: false, //防止微信返回立即執行popstate事件
},
listenerBack: function () {
var state = {
title: "title",
url: "#"
};
window.history.pushState(state, "title", "#");
window.addEventListener("popstate", function (e) {
if (listenerBackHandler.param.isRun) {
window.location.href = "./A.html"; //返回到主頁
}
}, false);
},
//初始化返回事件
initBack: function () {
window.addEventListener('pageshow', function () {
listenerBackHandler.param.isRun = false;
setTimeout(function () { listenerBackHandler.param.isRun = true; }, 1000); //延遲1秒 防止微信返回立即執行popstate事件
listenerBackHandler.listenerBack();
});
}
};
listenerBackHandler.initBack();
</script>
</body>
</html>