![](/img/trans.png)
[英]Chrome popstate not firing on Back Button if no user interaction
[英]How to handle back button when browser is not firing popstate event immediately
這個問題可能聽起來很奇怪,因為大多數時候popstate會在用戶按下后退按鈕時同步觸發。
但是,W3C規范規定允許UA(瀏覽器)在遍歷歷史時對popstate進行排隊(參見第14項),即。 popstate
是異步觸發的(即使此時URL已更改)。
瀏覽器供應商以不同方式解釋和實現此規 Mozilla決定 Firefox應該能夠在load
之前觸發popstate
,並且有充分的理由,以便慢速圖像不會阻止popstate
。
Chrome / Safari另有決定,它引發了我們的問題:
在管理Web應用程序的歷史記錄時,通常需要盡快啟動歷史記錄管理,例如。 在DOMContentLoaded
而不是load
。 但作為回報,用戶無法退出任何pushState
,因為所有popstate
排隊直到load
。
我們正在尋求處理此類方案的方法的建議。 我自己想出幾個:
load
圖像,因此load
可以盡快解雇。 load
為止。 load
而不是DOMContentLoaded
。 有更好的解決方案嗎?
更新 :當load
前激活ajax時,事情變得難看,如果這些請求導致DOM更改,並且DOM更改恰好有一些圖像, load
會延遲,直到這些圖像被加載/超時,這意味着popstate
排隊等待更長時間。
更新2 :要為它添加一個簡單的演示,請訪問帶有chrome的jsbin頁面 ,看看popstate
將被阻止,直到load
為止。 您可以比較緩存圖像和未緩存圖像之間的結果。
你可以嘗試在卸載上一頁時調用popstate。 例如,如果您在第1頁並希望轉到第2頁,而不是在第2頁的加載/准備期間調用pop狀態,為什么不在第1頁的unload事件中調用pop狀態?
不確定它是否滿足您的情況。 但是我無法在你的箱子里嘗試它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.