企业微信有自己的jsAPI比如关闭当前网页窗口
1、关闭当前网页窗口接口
2、监听页面返回事件
3、普通页面一般使用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(); }); } }
4、假如页面A点回退退出当前页面,页面B点回退回到页面A
5、如果快速点击A,B页面的回退,会发现页面A并不会执行closeWindow,这是因为jsApi需要签名,签名需要时间,
$(function () {
history.pushState(null, null, document.URL);
listenerBackHandler.initBack("exit");
});
通过增加
history.pushState(null, null, document.URL);
即可解决来不及执行closeWindow问题。
6、另外一种方法,没有试验,直接禁用回退事件
<script language="javascript"> //防止页面后退 history.pushState(null, null, document.URL); window.addEventListener(‘popstate‘, function () { history.pushState(null, null, document.URL); }); </script>
在timeout结束时在重新启用popstate即可。
7、添加移除事件示例
// 向 <div> 元素添加事件句柄 document.getElementById("myDIV").addEventListener("mousemove", myFunction); // 移除 <div> 元素的事件句柄 document.getElementById("myDIV").removeEventListener("mousemove", myFunction);