Opera中的Javascript location.replace错误

时间:2012-02-03 14:48:40

标签: javascript location opera

我正在Opera中做一个JS location.replace。有一个已知错误,该位置不会被替换,但只在location.hash更改时更新(请参阅http://my.opera.com/community/forums/topic.dml?id=568931)。

我试图执行以下解决方法:

var url = location.href.split("#")[0];
if (window.opera) {
  window.history.back();
}
location.replace(url + '#' + newhash);

不幸的是,这似乎不起作用。在我开始尝试使用setTimeout之前,我想检查是否有人有更好的想法。

2 个答案:

答案 0 :(得分:2)

我认为最好的解决方法是根本不解决它。

推理:首先,如果我使用后退按钮,或者调用history.back(),则应终止在页面中运行的脚本。因此,在上面的解决方法中,脚本将(或应该)在location.replace()调用之前实际停止运行。我们不记得你想调用location.replace()并在你回去的页面上执行它,因为这将是脚本注入安全问题。

其次,即使这种解决方法有效,我也非常建议不要使用它。原因是Opera最终会修复它的bug。如果最终用户使用修复的 Opera版本和运行脚本的页面,则每次点击其中一个链接都会从该用户的浏览历史记录中删除一个条目。

要获得正确的解决方案,您可以调查history.replaceState() - HTML5中指定的新方法:http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#dom-history-replacestate

答案 1 :(得分:0)

你可以澄清一下吗?我从您发布的论坛链接中获取了示例,并将其上传到此处:http://people.opera.com/miket/tmp/replace.html。在Opera 11.61 / Mac中,它似乎按预期工作。

您是否看到了不同的东西?你能更详细地解释一下你的问题吗?