Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
532 views
in Technique[技术] by (71.8m points)

手机浏览器中,修改location.href没有如预期地产生历史记录

我想实现这样一个需求:
页面地址中包含参数pid,pid存在表示打开当前页面后就要立刻跳转到pid对应的某个外部页面,用户从外部页面后退时,可以回到当前页面,正常显示页面内容。

我的实现方式是:
用hash存储pid。在页面入口js中,如果发现hash里存在pid,就通过ajax从后台获取pid对应的URL,然后从location.hash里去掉pid,再修改location.href进行跳转。

但是实测发现,在手机浏览器中,不管我什么时候跳转页面,按后退的时候标签页会直接回到最初状态,没有留下历史记录。

已经尝试过以下方法,都不起作用:

  1. 在修改hash后,加setTimeout延时2秒再跳转
  2. 使用location.assign
  3. 使用history.pushState手动写入当前页面URL后再跳转
  4. 在window.onload里执行判断并延时跳转

倒是发现一个奇怪的现象,在延时跳转前,如果手动点击过页面任意位置,以上历史记录的操作代码就可以生效,去新页面后能够正常返回。
但是,使用dispatchEvent模拟出来的用户点击操作仍然不行。

关于href跳转和历史记录生成的方式,有什么潜规则在里面吗?

https://html.spec.whatwg.org/multipage/history.html#location-object-setter-navigate
在这里搜索到的描述显示:
2、3两种情况是由用户触发的click事件后续动作引起的location修改可以产生历史记录。
但1(location对应的document完全加载)应该可以,如果指的不是onload事件之后,那怎样才是完全加载状态呢


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
等待大神解答

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...