1. 程式人生 > >點選返回按鈕只能返回某一個 明確的頁面(主要是處理 ios 中 web的)

點選返回按鈕只能返回某一個 明確的頁面(主要是處理 ios 中 web的)

非 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>

詳細程式碼如下連線

參考