Opera中的Javascript位置.replace错误

Javascript location.replace bug in Opera

本文关键字:replace 错误 位置 Javascript 中的 Opera      更新时间:2023-09-26

我正在Opera中执行JS位置.replace。存在一个已知的错误,即位置不会被替换,而是在只有位置更改时更新。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之前,我想看看是否有人有更好的想法。

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

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

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

对于一个合适的解决方案,您可以研究history.replaceState()——HTML5中指定的一种新方法:http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#dom-历史替换状态

你能澄清一下吗?我以你发布的论坛链接为例,上传到这里:http://people.opera.com/miket/tmp/replace.html.在Opera 11.61/Mac中,它似乎如预期的那样工作。

你看到什么不一样的东西了吗?你能更详细地解释一下你的问题吗?