企業微信監聽回退事件快速連續點擊不執行關閉方法處理

企業微信有本身的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.

相關文章
相關標籤/搜索