企業微信有本身的jsAPI好比關閉當前網頁窗口javascript
一、關閉當前網頁窗口接口
java
二、監聽頁面返回事件微信
三、普通頁面通常使用popupstate實現返回,不必使用wx.onHistoryBack,由於這個函數只有企業微信支持,在微信上不支持。
函數
var listenerBackHandler = { param: { isRun: false, returnUrl: "" //防止微信返回當即執行popstate事件 }, //初始化返回事件 initBackDirect: function (p_url) { listenerBackHandler.param.returnUrl = p_url; listenerBackHandler.param.isRun = true; listenerBackHandler.listenerBack(); }, listenerBack: function () { var state = { title: "title", url: "#" }; window.history.pushState(state, "title", "#"); window.addEventListener("popstate", function (e) { if (listenerBackHandler.param.isRun) { if (listenerBackHandler.param.returnUrl != "") { if (listenerBackHandler.param.returnUrl == "exit") { try { wx.closeWindow(); } catch (e) { console.log(e.message); } return false; } window.location.replace(listenerBackHandler.param.returnUrl); return false; } } }, false); }, //初始化返回事件 initBack: function (p_url) { listenerBackHandler.param.returnUrl = p_url; window.addEventListener('pageshow', function () { listenerBackHandler.param.isRun = false; setTimeout(function () { listenerBackHandler.param.isRun = true; }, 1000); //延遲1秒 防止微信返回當即執行popstate事件 listenerBackHandler.listenerBack(); }); } }
四、假如頁面A點回退退出當前頁面,頁面B點回退回到頁面Aurl
五、若是快速點擊A,B頁面的回退,會發現頁面A並不會執行closeWindow,這是由於jsApi須要簽名,簽名須要時間,spa
$(function () {
history.pushState(null, null, document.URL);
listenerBackHandler.initBack("exit");
});
經過增長code
history.pushState(null, null, document.URL);
便可解決來不及執行closeWindow問題。blog
六、另一種方法,沒有試驗,直接禁用回退事件接口
<script language="javascript"> //防止頁面後退 history.pushState(null, null, document.URL); window.addEventListener('popstate', function () { history.pushState(null, null, document.URL); }); </script>
在timeout結束時在從新啓用popstate便可。事件
七、添加移除事件示例
// 向 <div> 元素添加事件句柄 document.getElementById("myDIV").addEventListener("mousemove", myFunction); // 移除 <div> 元素的事件句柄 document.getElementById("myDIV").removeEventListener("mousemove", myFunction);
上面方法理論上也能夠處理進頁面就執行回退問題。
八、連續兩次回退問題
重現方法,在蘋果手機上
頁面A、B使用popstate檢測,頁面C什麼代碼也不寫,當從頁面A進入頁面B到C再點物理鍵返回時,就會連續回退兩次到A.,解決辦法同1.