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


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

上面方法理論上也可以處理進頁面就執行回退問題。

8、連續兩次回退問題

重現方法,在蘋果手機上

頁面A、B使用popstate檢測,頁面C什么代碼也不寫,當從頁面A進入頁面B到C再點物理鍵返回時,就會連續回退兩次到A.,解決辦法同1.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM