将历史状态替换到同一路径后,Javascript使用哈希重定向
我有两个主干模型更改事件同时发生:将历史状态替换到同一路径后,Javascript使用哈希重定向,javascript,redirect,backbone.js,Javascript,Redirect,Backbone.js,我有两个主干模型更改事件同时发生: change:path替换当前历史状态并修补某些链接 在页面上 change:language应重定向到带有附加哈希的新路径 重定向应该取代替换状态,但如果提供哈希,则不会发生这种情况。我正在努力让它在Chrome中工作 此代码不重定向: // in change:path event window.history.replaceState({state: 1}, "", "/new_path"); // in change:language event w
change:path
替换当前历史状态并修补某些链接
在页面上change:language
应重定向到带有附加哈希的新路径// in change:path event
window.history.replaceState({state: 1}, "", "/new_path");
// in change:language event
window.location.replace("/new_path#hash");
但如果没有散列,它将按预期工作:
// in change:path event
window.history.replaceState({state: 1}, "", "/new_path");
// in change:language event
window.location.replace("/new_path");
有没有办法让它和哈希一起工作?我知道我可以添加一些时间戳以使新url完全不同,但我希望url是干净的。我已经设法以一种不那么干净的方式解决了它,但我仍在寻找更好的解决方案:
// change:path event
window.history.replaceState({state: 1}, "", "/new_path");
// change:language event
setTimeout(function(){
// make sure it runs after replaceState in change:path
window.history.replaceState({}, "", "/");
window.location.replace("/new_path#hash");
}, 10);
看起来最好的方法不是使用
replace
方法,而是将位置作为一个整体进行设置。像这样:
window.location.href = 'http://www.sitename.com/new_path#hash';
您是否尝试过将#符号编码为%23?我刚刚尝试过,将#符号编码为%23使其成为路径的一部分。而不是
window.location.replace(“/new#path#yourHash”)
,您可以这样更改哈希值:window.location.hash=“yourHash”代码>在调用replaceState后不会重定向。您可以自己尝试,打开控制台并运行以下代码:window.history.replaceState({state:1},“,”/new_path”);window.location.href=window.location.origin+“/new_path#hash”代码>它不会重定向。我重定向了,它确实有效。你使用的是什么版本的Chrome?我问这个问题的原因是,不久前有一个版本的哈希有点奇怪,我正在使用最新的Chrome for OS X,这段代码只替换位置,不重定向页面。replaceState
使用window.location.href
重定向后。由于您试图用要访问的url替换历史状态,因此您应该能够在页面加载的下一页上获取“当前”url,并用它替换历史状态。