【问题标题】:top.location.replace creates history item in Safari/Chrometop.location.replace 在 Safari/Chrome 中创建历史记录项
【发布时间】:2009-07-31 13:22:27
【问题描述】:

此时我们有一个相册,它使用哈希值来确定当前向用户显示的图片,并支持将页面发送给朋友等。比如:

http://url/photos/#photo-4

当我们在点击下一个或上一个按钮后加载了相应的图片时,我们根据JS 1.1规范改变url使用:

top.location.replace(url.url + hash);

我们想要的行为是没有创建历史记录项,因此用户可以使用后退按钮离开相册,而不是使用后退按钮查看以前的照片。

在 IE 和 Firefox 中,该方法就像一个魅力,但 Safari 和 Chrome 确实为更改的 url 创建了一个历史记录项。我发现了很多示例如何在使用哈希进行这样的导航时创建历史记录项,但我想以另一种方式进行。有什么线索吗?

【问题讨论】:

    标签: safari replace google-chrome location


    【解决方案1】:

    现在按预期工作:

    Safari [5.1.7] location.replace() 上按预期工作 - URL 被替换,后退按钮的队列中没有任何内容,历史菜单中也没有任何内容。

    Chrome [21.0.1180.82] location.replace() 上有点棘手 - URL 被替换并且没有任何内容添加到后退按钮的队列中,但它确实添加了一个项目到历史菜单


    让这件事变得棘手的是有两个不同的历史队列——历史菜单和后退/前进按钮。单击并按住后退和前进按钮以查看其队列并与历史菜单进行比较。

    并且后退/前进按钮的历史队列与活动选项卡相关联。此外,即使您清除历史菜单,按钮历史也会保留 - 至少在您关闭标签之前。

    【讨论】:

      【解决方案2】:

      目前似乎没有解决办法。

      【讨论】:

      • 只是为了记录,2年后它仍然是一个烦人的问题...... Webkit错误修复有点慢。
      【解决方案3】:

      您是否考虑过使用 window.location.hash = newHash 分配哈希而不是替换整个 url?

      https://developer.mozilla.org/en/DOM/window.location

      【讨论】:

      • Yes "replace(url) 用提供的URL替换当前文档。与assign()方法不同的是,使用replace()后当前页面不会保存在session中历史,这意味着用户将无法使用后退按钮导航到它。”然后我得到了我的错误,因为这在 Webkit 中不起作用。
      • location.hash 在除 IE 之外的所有主要浏览器中创建历史记录项,所以这不起作用:-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多