为什么在 Safari 16.* 和 Chrome 107.0.5304 中使用内置浏览器后退按钮时,history.pushState() 不受尊重?

问题描述 投票:0回答:1

我发现在这些版本的 Safari 和 Chrome 中,在没有用户输入的情况下将新的状态值推送到浏览器历史记录中会出现意外行为。它将正确更新状态。您将能够使用浏览器

history
API 与更新后的状态进行交互。您将能够使用 cmd + 向左和向右的 MacOS 快捷方式在历史记录中向前和向后导航。

您将无法点击浏览器的“后退”按钮并让它返回到您加载的页面的初始 URL。长按“后退”按钮时,您将看到正确的历史记录。您能够正确呼叫hsitory.back()

一个简单的示例片段:

<!DOCTYPE html> <html> <body> <script> window.history.pushState({a:1 }, '', window.location.pathname + "?page=1"); </script> <h1>Safari History Issue</h1> </body> </html>

如果您将此 html 作为索引文件加载到本地服务器上,您可以按照以下步骤重现此问题:

导航至 google.com
  1. 导航到本地服务器
  2. 这应该将状态推至 ?page=1
  3. 长按后退按钮即可看到初始本地页面(无参数)以及 google 现在都在您的浏览器历史记录中
  4. 点击浏览器上的“后退”按钮
  5. 这将带您一路回到谷歌,而不是回到
  6. pushState()
  7. 之前的初始本地页面
    
  8. 如果您因用户操作(例如
pushState()

事件)而

onclick
,则不存在此问题。
我想知道这些浏览器的最新版本中是否有一些未记录的安全更新导致了此问题?

google-chrome safari browser-history back pushstate
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.