除非使用setTimeout(),否则JavaScript重定向(location.href)会破坏Back按钮

Bun*_*gle 5 javascript firefox redirect settimeout location-href

我刚刚在Firefox 3.6/Mac中遇到过一些奇怪的行为.我怀疑这是一般的Firefox行为.

我创建了两个简单的测试页面,用于更改window.location.href属性以导航到新URL:

如果您使用以下任一文件尝试以下操作:

  • 打开一个新的/空白浏览器选项卡.
  • 粘贴URL并点击"Enter".

您会注意到两者之间的一个区别:使用第一个链接,浏览器的"后退"按钮被禁用; 使用第二个,它启用并按照我的预期工作.

两个脚本之间的唯一区别是后者在更改之前设置了一秒的超时window.location.href.

我不知道为什么会发生这种情况,我正在尝试实现第二个脚本的行为("后退"按钮继续按预期工作),而不会给用户造成任何延迟.

我最好的猜测是,Firefox可能通过设置window.location.href与使用该window.location.replace()方法相同来立即"重定向" ,因为我认为开发人员在使用后者时使用前者是很常见的.也许使用setTimeout,因为这导致代码异步运行,失败了这种行为.可能是这样吗?

我没有尝试setTimeout达到预期效果的最小值,但我现在就这样做了.我想弄清楚为什么会发生这种情况.

谢谢!

Nic*_*lay 1

我最好的猜测是,也许 Firefox 通过设置 window.location.href 来处理立即“重定向”,就像使用 window.location.replace() 方法一样,因为我认为开发人员在打算使用时使用前者是很常见的后者。也许使用 setTimeout 会导致代码异步运行,从而阻止这种行为。难道是这样吗?

我被告知你的猜测是正确的,但现在我看, HTML5 规范中似乎没有提及此要求(链接到最相关的页面,因为很难链接到缺乏要求)。