我想实现这样一个需求:
页面地址中包含参数pid,pid存在表示打开当前页面后就要立刻跳转到pid对应的某个外部页面,用户从外部页面后退时,可以回到当前页面,正常显示页面内容。
我的实现方式是:
用hash存储pid。在页面入口js中,如果发现hash里存在pid,就通过ajax从后台获取pid对应的URL,然后从location.hash里去掉pid,再修改location.href进行跳转。
但是实测发现,在手机浏览器中,不管我什么时候跳转页面,按后退的时候标签页会直接回到最初状态,没有留下历史记录。
已经尝试过以下方法,都不起作用:
- 在修改hash后,加setTimeout延时2秒再跳转
- 使用location.assign
- 使用
history.pushState
手动写入当前页面URL后再跳转
- 在window.onload里执行判断并延时跳转
倒是发现一个奇怪的现象,在延时跳转前,如果手动点击过页面任意位置,以上历史记录的操作代码就可以生效,去新页面后能够正常返回。
但是,使用dispatchEvent
模拟出来的用户点击操作仍然不行。
关于href跳转和历史记录生成的方式,有什么潜规则在里面吗?
https://html.spec.whatwg.org/multipage/history.html#location-object-setter-navigate
在这里搜索到的描述显示:
2、3两种情况是由用户触发的click事件后续动作引起的location修改可以产生历史记录。
但1(location对应的document完全加载)应该可以,如果指的不是onload事件之后,那怎样才是完全加载状态呢
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…