Opera中的Javascript location.replace错误

Opera中的Javascript location.replace错误,javascript,location,opera,Javascript,Location,Opera,我正在Opera中执行JS location.replace。存在一个已知的错误,该位置不会被替换,而是在只有location.hash发生更改时更新(请参阅) 我正在尝试以下解决方法: var url = location.href.split("#")[0]; if (window.opera) { window.history.back(); } location.replace(url + '#' + newhash); 不幸的是,这似乎不起作用。在我开始试验setTimeout之

我正在Opera中执行JS location.replace。存在一个已知的错误,该位置不会被替换,而是在只有location.hash发生更改时更新(请参阅)

我正在尝试以下解决方法:

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

不幸的是,这似乎不起作用。在我开始试验setTimeout之前,我想看看是否有人有更好的主意。

你能澄清一下吗?我从您发布的论坛链接中获取了示例,并将其上传到此处:。在Opera 11.61/Mac中,它似乎如预期的那样工作


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

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

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

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


为了找到合适的解决方案,您可以研究
history.replaceState()
——HTML5中指定的一种新方法:

我正在Opera11.60/Windows7中测试。问题是,在Opera中,位置只是改变了。它不会被替换,例如,当我单击FF中的按钮时,我无法使用撤消功能。在歌剧中我可以。这与您不同吗?您所说的“撤消”是指“返回”吗?是的,浏览器导航“返回”。我有点不清楚。我完全同意第一和第二点。replaceState()似乎很有帮助,Opera完全支持它。我会在这里调查并报告。非常感谢。我尝试了:window.history.replaceState(window.history.state,”,url);window.history.go(0);不幸的是,这会重新加载页面(但替换可以工作!)。因为我使用replace主要是为了缩短长哈希,所以replaceState对我来说就足够了(我不需要onhashchange事件)。谢谢你的建议!