2012-01-14 71 views
4

我找了這個答案,找不到一個,我不知道它是否是一個bug,看起來瀏覽器對這個HTML5函數有不好的支持..使用history.replaceState更改url前狀態

我只有鉻和Firefox來測試。 (最新的穩定版本)。

$(function(){ 
if (window.history.state != null) $("#content").html(window.history.state.value); 
$(window).bind("beforeunload", function() { window.history.replaceState({ value:"remember me"}, "", document.location.href + "?param=rememberme"); }); 
}); 

試試吧。我試圖在beforeunload上更改當前的url,所以我可以將數據信息保存在url中,以便當用戶返回到頁面時,他將使用已更改的url重新加載頁面。

但在頁面重新載入時表現奇怪。 首先在鉻window.history.state甚至不存在(尚不支持?),所以無法在重新加載時獲取狀態。並在頁面重新加載URL更改不記憶。 但是,如果你去另一個網站,回來的網址更改是remebered。

在firefox window.history.state存在,並在頁面重新載入或歷史向前/向後,狀態被正確提取。但是URL更改在頁面重新加載時不起作用,URL每2次重新加載都會正確更改。如果你前進/後退的URL更改將被正確處理。

任何人都知道如何使頁面重新加載(F5)的代碼正常工作,如果鉻仍然不支持history.state? 頁面重新載入行爲是否正確,或者瀏覽器沒有正確處理?

如果任何人都可以在Safari上測試它,我很想知道它是如何工作的。

就在那裏測試代碼:http://www.braikar.com/stuff/test.html

+0

它似乎每次都在Firefox中爲我工作的很好,但在其他人(Safari,Opera,Chrome)中,它會更改歷史記錄中的URL,但不會將內容'記住我'添加到div中。在IE中它根本不起作用 - 那就不奇怪了! – ClarkeyBoy 2012-01-14 23:49:57

+0

需要注意HTML 5的一個很好的網站是http://html5test.com/ - 它看起來不像歷史上的那麼好,但還有很多其他的東西可能需要在某個時候知道。編輯:現在我明白了你每次第二次重新加載Firefox的意義,我只是在點擊鏈接時才檢查。 – ClarkeyBoy 2012-01-14 23:54:58

+0

我甚至不用IE來打擾..我期待它不會工作;)我正在製作一個cms系統,這就是爲什麼我只想了解這個歷史行爲是否正確或者它是否正確那些尚未實現的瀏覽器。根據https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history,行爲應該在頁面重新加載時正常工作,因爲我在頁面重新加載之前改變狀態。 – Braikar 2012-01-15 13:18:48

回答

0

您是否嘗試過使用Cookie來存儲您的變量?您可以在啓動前設置它並在加載時讀取它。