微信内置浏览器返回键popstate事件监听不触发问题(安卓)

微信内置浏览器返回键popstate事件监听不触发问题(安卓)

    最近接到一个需求,在页面返回的时候需要跳转到指定的链接地址。这也没什么特别。但是做好测试的时候,发现在android设备有个物理/虚拟放回按键,这个返回直接就退出了浏览网页。点击页面中的返回是没问题的。经过各种折腾就是无法实现效果。

问题如下:

    页面实现onpopstate监听返回事件,anroid设备返回按键点击不触发onpopstate事件。   

    部分代码如下:

   var balink="http://www.baidu.com";

    function pushHistory() {

        var state = {

            title: "上一页",

            url: balink

        };

        window.history.pushState(state, "title", "#")

    }

    $(function() {

        pushHistory();

        window.addEventListener("popstate", function(e) {

            if (balink != "") {

                window.location = balink

            }

        }, false)

    });

    测试在火狐浏览器是可以触发popstate事件的

尝试解决过程:

    1.尝试在网上找解决办法,发现还是有人也遇到了这些问题的,但是都没有解决办法





   测试发现,页面打开后,如果用户点击了页面有交互后,onpopstate事件监听就能正常触发,很奇怪。如果页面打开无任何操作,直接按android返回按钮。事件回调就没触发。直接退出了也退出了浏览器。

    但是客户需要的效果就是不用用户点击页面,也能监听返回并跳转到指定链接。

    有人说是什么浏览器的问题,有什么安全策略问题。应该都不是主要原因。

    2.然后想着自动触发页面body是否可能可以

         失败了,无效,不会触发onpopstate事件 


最后查了下微信浏览器内核的相关资料。引入了一些东西,虽然是完美解决了返回的问题。但还是没完全弄明白原因。


代码:

pushHistory();

window.addEventListener("popstate", function(e) {

    alert("我监听到了浏览器的返回按钮事件啦");//根据自己的需求实现自己的功能

    window.location.href='https://www.baidu.com/';//指定回退的地址

}, false);

function pushHistory() {

    var state = {

        title: "title",

        url: "#"

    };

    window.history.pushState(state, "title", "#");

}

这样写必须点击一下  于是通过改写(我是直接让点击返回直接跳转到百度 具体情况参考你们代码) :

var bool = true;

pushHistory();

function pushHistory() {

    var state = {

        title: "title",

        url: "#"

    };

    window.history.pushState(state, "title", "#");

};

window.onload = function() {

    setTimeout(function() {

        window.addEventListener('popstate', function() {

            if(bool == true) {

                alert();

                window.location.href='https://www.baidu.com/';//指定回退的地址

            }

        });

    }, 0);

};

这样微信内置浏览器回退后100%触发popstate事件 

你可能感兴趣的:(微信内置浏览器返回键popstate事件监听不触发问题(安卓))