我有一個簡單的網頁,即:如何讓Firefox在從不同域的頁面返回時觸發popstate事件?
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>History hacks</title>
<script>
window.onpopstate = function (e) {
alert("location: " + document.location + ", state: " + JSON.stringify(e.state));
}
window.onload = function (e) {
alert('page loaded');
}
</script>
</head>
<body>
<p> <a href="http://www.yahoo.com">Yahoo</a> <a href="#part1">Part 1</a></p>
</body>
</html>
現在有關於Chrome和Firefox如何觸發popstate事件(我不敢想我要對付我避開了一些分歧測試IE),但是在這裏給我帶來問題的是,Chrome會觸發一個popstate事件,只要我點擊這兩個鏈接中的任何一個,然後再點擊後退按鈕。 Firefox會觸發改變哈希部分的鏈接的事件(只有第一次,如果哈希鏈接是相同的),並且如果我點擊雅虎鏈接然後單擊後退按鈕,將不會觸發它。
那麼有什麼方法可以告訴我,Firefox用戶剛剛點擊並從另一個域上完全不同的站點返回到我的頁面?是否有另一個事件可以在Firefox中用於此目的? (當我從yahoo.com返回時,負載事件不會被觸發。)
這是說明如何使歷史API的工作方式相同的跨平臺有很大的答案,但它實際上並沒有回答OP的問題:**如何判斷用戶是否實際點擊了「返回」以結束頁面**使用您的示例,您可以知道用戶點擊了Chrome和Safari,因爲mypop在onpopstate處理程序中不會爲空。然而,在Firefox中,onpopstate不會被調用,所以似乎無法確定用戶是否返回頁面,或者是否是第一次訪問。那麼是否有任何方法可以在Firefox中區分這一點? – Karmacon
@Karma:如果您禁用bfcache(請參閱我的答案的最後部分),那麼Firefox的行爲應與Chrome相似。但請閱讀Boris Zbarsky的回答,爲您解釋爲什麼您應該更喜歡Firefox的頁面緩存以適應Chrome的行爲。 –
謝謝@Sean Hogan。在重新閱讀Firefox bfCaching之後,我意識到它不適用於我的網站,因爲我們使用https。 Firefox總是刷新頁面。我想我無能爲力。 – Karmacon