2015-07-12 74 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