2013-03-26 183 views
3

我運行一個簡單的:window.location.hash沒有創造瀏覽器歷史記錄條目

window.location.hash = "hash"; 

在URL頁面加載之後添加一個哈希值。我得到了mySite.com/aPage#hash。當我點擊後退按鈕時,我預計url會變回mySite.com/aPage,而不會有任何實際加載/返回。相反,我將在我的網站/頁面之前回到歷史記錄。

當我調用window.location.hash例如在由用戶觸發的點擊事件回調中。

我創建了一個測試:http://jsbin.com/idukiz/1/ 見代碼:http://jsbin.com/idukiz/1/edit

只有最後一個哈希setTimeout函數裏面添加的行爲像我期望的那樣。任何想法如何讓它在沒有setTimeout的情況下工作?

回答

1

任何想法如何使它在沒有setTimeout的情況下工作?

一個動態地創建<a>#yourHash到您dispatchEvent鼠標點擊HREF

window.onload = function() { 
    location.hash = 'foo'; // no history item created, just to help visibility 
    var a = document.createElement('a'), 
     ev = document.createEvent("MouseEvents"); 
    a.href = '#bar'; // this will create history item 
    ev.initMouseEvent("click", true, false, self, 0, 0, 0, 0, 0, false, false, false, false, 0, null); 
    a.dispatchEvent(ev); // dispatch click 
}; 

代碼示例here。谷歌瀏覽器25測試。

+0

谷歌瀏覽器不需要這個,是嗎? Chrome會爲每個'location.hash'更改創建歷史記錄'...或者,如果它位於'onload'中,則不會創建歷史記錄? – Rudie 2013-03-26 21:07:15

+0

這個問題是關於頁面加載時間之後的問題,其中'location.hash'通常不會更新歷史記錄。 – 2013-03-26 21:19:43

+0

Actauly它不會運行/創建歷史記錄條目,即使在文檔就緒或窗口onload在鉻中。我只需要它在IE中,它在文檔準備好的地方工作。 – Hans 2013-04-05 11:38:44

相關問題