Opera 11.50+的history.replaceState()实现

时间:2012-01-10 16:46:16

标签: javascript opera browser-history

考虑这个jsfiddle:http://fiddle.jshell.net/maple/JbEJN/show/(这是结果窗口,为了使replaceState起作用,请参阅actual fiddle with code here: http://jsfiddle.net/maple/JbEJN/)。

这是一个简单的javascript选项卡控件。我点击“标签1”,看到一个div的内容。我点击“标签2”隐藏正在显示的div并显示另一个具有不同内容的div。您将获得钻取标准选项卡控件。

现在,我想要的是使用主题标签来为页面添加书签或链接,并选择某个标签。我想要的是每次在标签之间切换时创建一个浏览器历史记录条目,这样当我按回去时我必须绕过10个标签然后才能回到我来到的页面从

我打算实现这个的方法是在我在标签之间切换时使用replaceState()将标签插入到页面的URL中,如下所示:

window.history.replaceState(null, '', '#tabname');

我期望在这里发生的是在切换选项卡时没有创建历史条目,因此当我在选项卡之间切换几次时,我看到了hashmark更改,但是当我点击后退按钮时我只是回到上一个页面(如果我在新窗口中打开测试页面,则没有任何反应)。

这适用于Chrome,Firefox和Safari,但不适用于Opera 11.50和11.60。据我所知,Opera声称完全支持Opera中的历史API,但Opera中发生的事情是replaceState()的工作方式与pushState()类似,条目被放入历史记录中。

这是Opera中的错误,还是我应该在Opera中以不同的方式使用API​​?

1 个答案:

答案 0 :(得分:0)

我想这里发生的事情是click事件的默认操作是激活链接 - 所以在调用replaceState()之后,默认操作将更新URL,添加#tabname,并创建历史记录条目。尝试使用event.preventDefault()http://jsfiddle.net/JbEJN/8/show/

我不确定您的原始代码在Chrome和Firefox中的效果如何。如果replaceState()已经更新了URL并且链接的激活不会改变它,他们可能不创建历史条目?如果是这样,Opera应该改变以匹配它们。您可以在https://bugs.opera.com/wizard/上将此报告为问题吗?如果你给我错误参考ID,我会跟进。