将历史状态替换为相同路径后,Javascript重定向并使用哈希

时间:2012-10-31 14:39:35

标签: javascript redirect backbone.js

我有两个同时发生的骨干模型更改事件:

  1. change:path替换当前的历史状态并修补一些链接 在页面上,
  2. change:language应该使用其他哈希值重定向到新路径
  3. 重定向应取代替换状态,但如果提供散列则不会发生这种情况。我正在努力让它在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");
    

    有没有办法让它与hash一起使用?我知道我可以添加一些时间戳来使新网址完全不同,但我希望网址干净。

2 个答案:

答案 0 :(得分:1)

我设法以一种不那么干净的方式解决它,但我仍然在寻找更好的解决方案:

// 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);

答案 1 :(得分:1)

看起来最好的方法是不使用replace方法,而只是将位置设置为整体。像这样:

window.location.href = 'http://www.sitename.com/new_path#hash';