为何Safari16.*与Chrome107.0.5304中history.pushState()不受后退按钮正常识别?
无用户交互触发的history.pushState()在特定浏览器版本中的异常行为
现象总结
在Safari 16.*和Chrome 107.0.5304版本中,非用户交互触发的history.pushState()存在以下异常表现:
- 状态能正常更新,通过浏览器History API或MacOS的
cmd+左右方向键可正常进行历史导航 - 点击浏览器后退按钮时,无法返回页面加载时的初始URL,会直接跳转到更早的外部页面(如google.com)
- 长按后退按钮能看到完整且正确的历史记录,直接调用
history.back()方法也能正常工作 - 若
pushState()由用户操作(如onclick事件)触发,则无上述问题,功能完全正常
示例代码
<!DOCTYPE html> <html> <body> <script> window.history.pushState({a:1 }, '', window.location.pathname + "?page=1"); </script> <h1>Safari History Issue</h1> </body> </html>
复现步骤
- 先访问外部页面(如google.com)
- 再访问部署在本地服务器上的上述测试页面
- 页面加载后自动执行
pushState(),URL变为?page=1 - 长按浏览器后退按钮,可见历史记录包含:带参数的当前页面、无参数的初始本地页面、google.com
- 点击后退按钮,会直接跳转到google.com,而非预期的无参数初始本地页面
推测
该异常大概率是这些浏览器新版本中未公开的安全更新导致的限制,可能是为了防止页面未经用户许可随意篡改历史记录,干扰正常的浏览导航逻辑。
内容的提问来源于stack exchange,提问作者Rinato
相关产品推荐
相关产品推荐

