我使用pushState的改變網站的網址:我應該用什麼JS在使用onPopState和pushState的
history.pushState("", "info", "/info");
偉大的工程,但現在的後退按鈕不工作。我相信我需要使用通過歷史堆棧並呈現相應頁面的onPopState編寫自己的後退和前進按鈕行爲。訣竅是,當「後退」爲空時,它應該做後退按鈕通常會做的事情(在用戶進入我的網站之前回到頁面)。
這似乎是非常標準的行爲,是否有配方/我可以使用的一些標準代碼?
我使用pushState的改變網站的網址:我應該用什麼JS在使用onPopState和pushState的
history.pushState("", "info", "/info");
偉大的工程,但現在的後退按鈕不工作。我相信我需要使用通過歷史堆棧並呈現相應頁面的onPopState編寫自己的後退和前進按鈕行爲。訣竅是,當「後退」爲空時,它應該做後退按鈕通常會做的事情(在用戶進入我的網站之前回到頁面)。
這似乎是非常標準的行爲,是否有配方/我可以使用的一些標準代碼?
啊,我想出了一個解決方案,不是很難,因爲我想(基本上它只是使用的URL路徑來呈現正確的東西):
// Makes the back button work
window.onpopstate = function(event) {
if (document.location.pathname == '/main') {
$("#main").show();
$("#info").hide();
$("#settings").hide();
}
if (document.location.pathname == '/info') {
alert('info');
$("#main").hide();
$("#info").show();
$("#settings").hide();
}
if (document.location.pathname == '/settings') {
alert('settings');
$("#main").hide();
$("#info").hide();
$("#settings").show();
}
};
儘管這會起作用,但我認爲在原始`pushState()`函數中輸入非空狀態是不必要的。 `history.pushState({state:「dummy state」},「info」,「/ info」);` – cartbeforehorse 2013-07-07 13:52:31
奇怪的是,後退按鈕不工作您。我使用的是History.js,它爲所有非HTML5瀏覽器提供了向後兼容的體驗,並且我沒有在任何瀏覽器或測試套件中遇到過這個問題......也許您會想要放棄這個問題?
我不認爲你需要做的事情自己實現使用pushState的後背部和前進按鈕的行爲,應該還是像以前一樣工作,但它會引發popstate,而不是讓一個HTTP請求等
我使用Davis.js來實現類似於您所擁有的功能,將某些onpopstate事件路由到行爲,將其檢出。
沒有框架,它僅僅是:
window.onpopstate = function(event){
// do something
}
我剛剛遇到這個問題我自己,我想我找到了爲什麼它不工作。
該文檔在該主題上似乎非常含糊。我讀過的說,你可以輸入一個空字符串(或空對象)到狀態參數中(如你在你的例子中所做的那樣)。
history.pushState("", "info", "/info");
當我這樣做,(在Chrome和Firefox的測試),「後退」和「前進」按鈕做的工作,在這個意義上,他們改變在瀏覽器的地址欄中的鏈接。但是,這就是他們所做的 - 與該鏈接關聯的頁面無法加載!
所以現在試試這個:
history.pushState({state: dummyState}, "info", "/info");
現在,「後退」和「前進」按鈕,似乎工作,因爲我希望他們來。就好像瀏覽器說「如果沒有'狀態'鎖定,那麼我就不打擾加載頁面。」
鑑於它在Firefox和Chrome中的工作方式相同,我猜這是一個記錄的功能。但如果是這樣,它的埋藏深度比我關心的要深。
你如何處理你的`yourdomain.com/info`的直接條目?這是否正確工作? – 2011-01-12 01:00:10