2015-07-12 45 views
2

我有下面的代码,检查pushState的,并降低对hashbang下,不支持(IE9):骨干历史pushState的到HASHTAG IE9

if(Backbone.history && !Backbone.History.started) { 
    if(!(window.history && history.pushState)) { 
     Backbone.history.start({ pushState: false, silent: true}); 
     var fragment = window.location.pathname.substr(
      Backbone.history.options.root.length); 
     var search = window.location.search; 
     Backbone.history.navigate(fragment + search, { trigger: true }); 
    } 
    else { 
     Backbone.history.start({ pushState: true }); 
    } 
} 

它功能的工作原理,但该URL转化而来:

http://dev.zwoop.be/home?page=1

http://dev.zwoop.be/home?page=1#home?page=1

看起来丑陋。
我正在寻找一个简单的修复方法,用hashtag替换主机名后面的整个片段。

回答

1

尝试更换

Backbone.history.navigate(fragment + search, { trigger: true }); 

通过

var modified = (fragment + search).replace(/([^\/]*)(#[^#]*)$/g, '$2'); 
Backbone.history.navigate(modified, { trigger: true }); 

它会转变成http://dev.zwoop.be/home?page=1#home?page=1http://dev.zwoop.be/#home?page=1

+0

谢谢,但它给了我同样的结果。出于某种原因,它只是将已导航的内容添加为已存在的整个路径(包括片段和查询字符串)之后的哈希标签。 – Trace

+0

现在我想到了,这种行为可能有一个合理的原因:如果一个IE9用户通过启用HTML5历史记录的浏览器向其他人发送链接(或打开相同的链接),路由器将不会考虑hashbang部分解决路线。这意味着'http://dev.zwoop.be/home?page = 1#home?page = 1'可用于非IE9浏览器,而'http://dev.zwoop.be/#home?page= 1'不会。 –

+0

嗯好点。但是,当pushstate可用时,不应该通过用斜杠替换hashbang来克服这种行为吗?可能是 – Trace