我正在實現一個網站,它在通過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_a到http://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,這散列部分應附加的底座部分? 還是有比我上面描述的方式更好的方法嗎?
嗨,你有沒有設法找到一個頁面被刷新時的問題的任何解決方案,瀏覽器加載第一個URL,而不是當前的一個? –
你讀這quesiton?:http://stackoverflow.com/questions/14342912/using-history-pushstate-in-ie9也許你可以找到一些有用的提示 – nikoskip
爲什麼不這樣做pushState的公共/ category_a和「重定向」到#pushstate工作時刪除散列? –