top.location.replace在Safari/Chrome中创建历史记录项

6

现在我们有一个照片库,使用哈希值来确定当前向用户显示的图片,并支持将页面发送给朋友等操作。类似于:

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

当我们通过点击“下一个”或“上一个”按钮加载相应的图片后,我们根据JS 1.1规范更改URL,如下所示:

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

我们希望的行为是不创建任何历史记录项,这样用户可以使用后退按钮离开相册,而不是使用后退按钮查看以前的照片。
在IE和Firefox中,该方法非常有效,但Safari和Chrome会为更改的URL创建历史记录项。我已经找到了很多关于如何在导航时使用哈希值创建历史记录项的示例,但我想用另一种方式实现。有什么线索吗?
3个回答

3

目前似乎没有解决方案。


仅供记录,两年后这仍然是一个令人烦恼的问题... Webkit 的 bug 修复有点慢。 - DarthJDG

3

现在这个功能可以正常运行:

Safari [5.1.7]中,location.replace()可以正常工作- URL被替换,不会向后退按钮队列添加任何内容,也不会向历史菜单添加任何内容。

Chrome [21.0.1180.82]中,location.replace()有点棘手- URL被替换,不会向后退按钮队列添加任何内容,但是它会向历史菜单添加一个项目。


让这变得棘手的是有两个不同的历史记录队列 - 历史菜单和后退/前进按钮。单击并保持后退和前进按钮以查看它们的队列,并与历史菜单进行比较。

而后退/前进按钮的历史记录队列与活动选项卡相关联。此外,即使清除了历史菜单,按钮历史记录仍然存在-至少在关闭选项卡之前。


0

"replace(url) 用提供的URL替换当前文档。与assign()方法的区别在于,使用replace()后,当前页面将不会保存在会话历史记录中,这意味着用户无法使用“后退”按钮导航到它。"然后我发现我的bug,因为这在Webkit中不起作用。 - Jan Jongboom
1
location.hash 在除了 IE 以外的所有主流浏览器中创建历史记录项,所以这不起作用 :-) - Jan Jongboom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接