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


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

  • 相关阅读:
    Bayesian CTR Prediction for Bing
    Gaussian and Truncated Gaussian
    An Introduction to Variational Methods (5.3)
    An Introduction to Variational Methods (5.2)
    An Introduction to Variational Methods (5.1)
    Variational Bayes
    微软的一篇ctr预估的论文:Web-Scale Bayesian Click-Through Rate Prediction for Sponsored Search Advertising in Microsoft’s Bing Search Engine。
    第五十二课、命令行参数的应用------------------狄泰软件学院
    第五十一课、程序中的配置文件------------------狄泰软件学院
    第五十课、关于对话框(About)------------------狄泰软件学院
  • 原文地址:https://www.cnblogs.com/zhaogaojian/p/11671314.html
Copyright © 2020-2023  润新知