簡體   English   中英

HTML5:觸發 popstate 時刷新頁面

[英]HTML5: Refresh page when popstate is fired

我有一個 ajax 搜索表單,例如:

網址:/搜索/

=> 用戶輸入搜索詞並單擊按鈕

=> 搜索完成並通過 ajax 在頁面上的 div 中顯示結果

但是:我還希望用戶能夠將 URL 復制並粘貼給朋友並瀏覽以前的搜索。 因此,當觸發搜索時,我將瀏覽器地址欄中的 url 從

/搜索/

/search/?q=你的關鍵字

使用:

window.history.pushState("", "Search for "+keyword, "/search/?q="+keyword);

這會將瀏覽器地址欄中的 url 更改為 /search/?q=yourkeywords 並且工作正常。

現在,點擊后退按鈕,瀏覽器地址欄再次顯示 /search/,這很好。 但是頁面內容沒有重新加載,它仍然顯示來自 /search/?q=yourkeyword 的結果。

所以我補充說:

window.addEventListener("popstate", function(e) 
{   location.reload();
});

這是正確的方法嗎? 它在 FF 和 Chrome 等桌面瀏覽器中運行良好,但例如在 iOS 中,popstate 事件在 /search/ 上第一次加載 searchform 時觸發,導致該頁面無休止地重新加載。

正確的方法是什么?

最簡單的解決方案是在使用pushState時設置全局變量。 然后,在onpopstate處理程序中,檢查是否已設置。 例如:

window.historyInitiated = true;
window.history.pushState("", "Search for "+keyword, "/search/?q="+keyword);
...
window.addEventListener("popstate", function(e) {
  if (window.historyInitiated) {
    window.location.reload();
  }
});

我的建議:

window.location.href = window.location.href;

我沒有測試它,但我認為它會做你想要的。

2022 年的新聞<\/h2>

當所有主要瀏覽器開始在頁面加載時不發出 popstate 事件時,此問題已解決。所以現在簡單地做應該是相對安全的:

 window.addEventListener("popstate", function(e){ location.reload(); });<\/code><\/pre>

現在所有主流瀏覽器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM