企业微信监听回退事件快速连续点击不执行关闭方法处理

企业微信有自己的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);

猜你喜欢

转载自www.cnblogs.com/zhaogaojian/p/11671314.html
今日推荐