我有两个 Backbone 模型更改事件同时发生:
change:path
替换当前历史状态并修补一些链接 在页面上,change:language
应该重定向到带有附加散列的新路径
重定向应该取代替换状态,但如果提供哈希则不会发生这种情况。我正在尝试让它在 Chrome 中运行。
此代码不重定向:
// 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);
关于将历史状态替换为同一路径后,Javascript 使用哈希重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13160438/