根据浏览器history模拟浏览器后退按钮显隐问题

Posted juicy-initial

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据浏览器history模拟浏览器后退按钮显隐问题相关的知识,希望对你有一定的参考价值。

场景:在APP页面开发中,有一个需求,做一个返回按钮,实现的功能和浏览器的后退按钮相同。

措施:具体思路如下:

          1.开始打开页面时,浏览器的history.length为1,按钮隐藏;

      2.当history.length>1时,点击按钮执行 history.go(-1);

   3.后退到历史记录栈中第一帧时,按钮隐藏。出于浏览器安全性考虑,history中没有给出属性判断其当前页的位置,所以,在开始打开页面,处于第一帧时,在当前url中添加参数,按钮点击事件触发时,根据该参数可判断是否是第一帧的位置。

解释:

一.history对象:

  属性

  • history.length
  • history.state
  • history.scrollRestoration

  方法

  • history.back()
  • history.forward()
  • history.go()
  • history.pushState()
  • history.replaceState()

二.向当前url中追加参数

var newurl = updateQueryStringParameter(window.location.href, ‘sp‘, ‘2‘);

window.history.replaceState(
    path: newurl
, ‘‘, newurl);

function updateQueryStringParameter(uri, key, value) 
    if(!value) 
        return uri;
    
    var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
    var separator = uri.indexOf(‘?‘) !== -1 ? "&" : "?";
    if (uri.match(re)) 
        return uri.replace(re, ‘$1‘ + key + "=" + value + ‘$2‘);
    
    else 
        return uri + separator + key + "=" + value;
    

 

以上是关于根据浏览器history模拟浏览器后退按钮显隐问题的主要内容,如果未能解决你的问题,请参考以下文章

组件通信 |后退和前进浏览器按钮 |恢复 history.state 有效载荷

防止页面后退(使浏览器后退按钮失效)

浏览器历史,判断是点击了后退按钮还是前进按钮

vue中通过history api拦截浏览器的前进后退按钮事件

如何用jQuery禁用浏览器的前进后退按钮

解决 iframe 后退不是主页面后退(浏览器 history)问题