我刚刚在Firefox 3.6 / Mac中遇到过一些奇怪的行为。我怀疑这是一般的Firefox行为。
我创建了两个简单的测试页面,用于更改window.location.href
属性以导航到新网址:
如果您使用以下任一文件尝试以下操作:
你会注意到两者之间的一个区别:使用第一个链接,浏览器的“后退”按钮被禁用;使用第二个,它已启用并按照我的预期工作。
两个脚本之间的唯一区别是后者在更改window.location.href
之前设置了一秒钟的超时。
我不知道为什么会发生这种情况,我正在尝试实现第二个脚本的行为(“后退”按钮继续按预期工作),而不会给用户造成任何延迟。
我最好的猜测是,Firefox可能会通过设置window.location.href
与使用window.location.replace()
方法相同来立即“重定向”,因为我认为开发人员在使用前者时常常使用前者使用后者。也许使用setTimeout
,因为这会导致代码异步运行,从而使这种行为失败。可能是这样吗?
我没有尝试setTimeout
的最小值来达到预期的效果,但我现在就会这样做。我想弄清楚为什么会发生这种情况。
谢谢!
答案 0 :(得分:2)
您正确地假设在加载页面时设置location.href被视为替换。实际上有两种不同的行为。
首先,从解析标记结果的脚本中设置location.href始终被解释为替换。这是implemented镜像Netscape 4行为和subsequently tweaked。
第二个是,作为onload处理程序的结果加载的任何新文档也总是被解释为替换。这是implemented和tweaked。
但是我很好奇为什么你这么热衷于这样做,因为这意味着用户必须使用Back下拉菜单转到页面之前的页面。 (如果继续将页面重定向到当前页面,则返回一页将毫无用处。)
答案 1 :(得分:1)
我最好的猜测是,Firefox可能会通过将window.location.href设置为与使用window.location.replace()方法相同来立即“重定向”,因为我认为开发人员在使用前者时很常见意味着使用后者。也许使用setTimeout,因为这会导致代码异步运行,从而使这种行为失败。可能是这样吗?
我一直told你的猜测是正确的,但现在我看来,HTML5 spec似乎没有提到这个要求(链接到最相关的页面,因为很难链接到没有要求)。