js怎么监听返回按钮的点击事件

最近项目要求,用户进入一个页面时,要区分是正向跳转进来的还是点击了返回按钮回到的当前页面。
由此我想到了监听用户点击返回按钮的事件。
HTML5有一个历史记录管理方法,包括history.pushState()方法和popstate事件。使用时需要先使用history.pushState()方法把当前页面的状态添加到浏览器的浏览历史记录中。用户点击“后退”或者“返回”按钮访问保存的历史状态时,会触发popstate事件。
但是:不兼容Safari浏览器!!!
求一兼容的监听浏览器后退按钮的点击事件,或者判断当前页面是来自返回的方法。

阅读 10k
6 个回答
获得上一个浏览历史的URL : document.referrer;

可以在url后面加上参数?isForward=asdfas来判断是否正向跳转。
正向跳转的时候生成随机字符串保存到localstorage里面,并且附在url后面,页面加载时比较两个字符串是否一致。
页面加载完成后需要更改保存在localstorage里面的字符串。
如果不是正向跳转那两个字符串会不一致。

    var detectBack = {

        initialize: function() {
            //监听hashchange事件
            window.addEventListener('hashchange', function() {

                //为当前导航页附加一个tag
                this.history.replaceState('hasHash', '', '');

            }, false);

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

                if (e.state) {
                    //侦测是用户触发的后退操作, dosomething
                    //这里刷新当前url
                    this.location.reload();
                }
            }, false);
        }
    }

    detectBack.initialize();

点击正向或返回按钮时给加一个状态值,并将状态值通过在url最后添加一个哈希值 #forward 或 #back来进行识别。
比如我点击返回按钮跳转到了这个页面,这个页面就用location.hash获取哈希值。然后判断一下就行了。

此方法还有个缺点:会多增加一条历史记录。结果就是,当我不想让当前页面产生历史,用replace()方法来跳转时,在跳转之后的页面,再点击返回又回到了上一级页面。其实我想要的结果是上上一级。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题