2012-06-06 60 views
8

我正在實現一個網站,它在通過ajax將新節加載到首頁時使用History.js動態設置其URL。Internet Explorer中的History.js散列回退和pushState問題

這似乎工作得很好,但是歷史記錄創建的url中的哈希部分存在問題,作爲Internet Explorer中的後備工具。

function connect_browse_buttons(){ 
    $('.browselink').each(function(){ 
     $(this).click(function(){ 
      var action = $(this).attr('name'); 
      action = action.substring(('action_browse').length); 
      browsetype = action; 
      if (isIE){ 
       // remove data object and title to avoid use of SUIDs by History.js in IE 
       History.pushState(null, null, '/public/' + action); 
      } else { 
       History.pushState({oldurl: History.getState()['url']}, "Example " + action, config.wwwroot + "public/" + action); 
      } 
      return false; 
     }); 
    }); 
} 

.htaccess文件重定向如http://example.com/public/category_ahttp://example.com,其中的JavaScript解析URL並加載通過AJAX的相應部分的任何URL:

這裏是頁面上的鏈接的例子,使用jQuery創建changeState處理程序中的請求。

的JavaScript檢查網址,如

http://example.com/public/category_a 

和在Internet Explorer中創建等同後備網址,即

​​

這一切工作正常 - 所以:

在Firefox,如果我在網站的根目錄下打開網站http://example.com,然後點擊上面的鏈接,內容lo廣告(在改變狀態的處理程序),並且URL由History.pushState設置爲:

http://example.com/public/category_a 

如果我再點擊另一個鏈接的URL設置,例如:

http://example.com/public/category_b 

在IE,如果我在站點的根目錄打開該網站,並點擊一個鏈接,按照上面的內容加載和URL設置一個哈希爲:

​​

如果我再CL下一個環節上ICK,該URL設置爲:

http://example.com/#public/category_b 

的問題出現當我在IE中打開一個網頁,在Firefox的書籤,並沒有在URL中的哈希值。讓我們以我們一貫的例子:

http://example.com/public/category_a 

如果我直接在IE中打開這個網址,通過書籤或在瀏覽器地址欄中粘貼URL和.htaccess成功重定向的URL被JS解析OK文件和內容加載。但是,現在如果我點擊category_b鏈接,網址是由History.pushState設置爲:

http://example.com/public/category_a#./category_b 

我真正想要的是設置網址爲:

http://example.com/#public/category_b 

然而,歷史。 js似乎將整個前一個url作爲後續pushStates的基礎URL。我曾嘗試在History.pushState中設置絕對網址,但沒有成功。正如你在上面的代碼塊中看到的那樣,我有一個特定於IE的pushState語句。我嘗試過以各種方式配置它。我怎樣才能獲得歷史pushState的認識到:

http://example.com 

的URL,這散列部分應附加的底座部分? 還是有比我上面描述的方式更好的方法嗎?

+0

嗨,你有沒有設法找到一個頁面被刷新時的問題的任何解決方案,瀏覽器加載第一個URL,而不是當前的一個? –

+0

你讀這quesiton?:http://stackoverflow.com/questions/14342912/using-history-pushstate-in-ie9也許你可以找到一些有用的提示 – nikoskip

+0

爲什麼不這樣做pushState的公共/ category_a和「重定向」到#pushstate工作時刪除散列? –

回答

0

據我所知,歷史上的API將始終使用整個URL(SANS散列)請求的初始頁面加載這一點。一旦頁面加載,你可以使用歷史API更改,最初的URL後會發生什麼,或者你可以使用哈希的變化而變化,最初的URL後會發生什麼,但有沒有辦法修改,而不會重新加載整個頁面。

我所知道的唯一選擇就是讓您的服務器將所有URL重定向/重寫到您想要的基本URL,然後將您的路徑,文件名,參數,哈希等傳遞給您客戶端路由器/控制器。我必須建議不要這樣做,因爲從Facebook上共享的網站鏈接(沒有太多詳細信息)將始終轉到http://example.com/或任何基本網址。

在我看來,在我的實踐中,我不使用歷史API,而使用哈希值發生變化,因爲它的工作原理無處不在。做並不總是很好,但我認爲除了散列之外,您還應該努力爲URL提供適當的Web服務器響應。這是我的一個網站特別難看網址:http://www.respectfulrevolution.org/road/videos/ian_barlow_finding_our_roots_forest#/road/videos/marcy_westerling_livingly_dying,但在瀏覽器中加載時,服務器與你在這裏看到的迴應:http://www.respectfulrevolution.org/road/videos/ian_barlow_finding_our_roots_forest然後在客戶端控制器加載你看到後,在這裏:http://www.respectfulrevolution.org/#/road/videos/marcy_westering_livingly_dying 應該加載作爲同:http://www.respectfulrevolution.org/road/videos/marcy_westering_livingly_dying