2011-08-23 64 views
6

問題beforeunload古怪

使用$(window).bind("beforeunload", ...[snip]問,如果一個用戶希望離開頁面產生在一些瀏覽器的一些奇怪的結果。彈出對話框,詢問您是否希望留在頁面上或離開頁面。如果您單擊頁面上的停留選項,則Google Chrome(最新 - 13.0.782.215米)和WinIE7會在「返回」按鈕中彈出最後一個歷史記錄頁面。

爲了說明這一點,當前會話歷史記錄由訪問以下網頁:

  • 第3頁
  • 第2頁

你決定離開第3頁和beforeunload事件觸發。您選擇保留在當前頁面上。

你再次點擊後退按鈕,這次決定離開頁面。您應該發現自己處於第2頁,而是在第1頁。您可以再次轉到第2頁。

問題

我怎樣才能防止瀏覽器去除後退按鈕這些網頁時,我們選擇了「留當前頁」選項?可能嗎?問題

使用谷歌瀏覽器,在一個新的窗口,頭http://stackoverflow.com

實例,並瀏覽了幾個問題都沒有回去。然後點擊Ask Question按鈕。開始在對話框中輸入內容。在您的瀏覽器中按返回。選擇停留在頁面上。再次按下瀏覽器,這次選擇離開頁面選項。你現在已經回到了歷史上的兩頁。如果您不止一次單擊頁面,您基本上可以返回多個頁面。

這是爲什麼?

我不想混淆我的用戶。他們不是計算機型的。

我的代碼(不,這是相關的)

$(window).bind("beforeunload", function(){ 
    if (in_edit > 0){ 
     return "You are currently editing this job.\n\nAre you sure you wish to exit the page?"; 
    } 
}); 
+0

有趣 - 我可以重現這個在Chrome 11(例如),但不是在加那利(15版)。我想這是/是一個錯誤,但無法找到http://www.crbug.com。 –

+0

我能夠在加那利重現它。 crbug.com ID 93858 – dan

+0

我剛剛在加那利嘗試過,並且第一次繞過我認爲*我設法讓它出錯,但現在無法重現:( –

回答

0

您可以嘗試包括隱藏的iframe到頁面,然後在onbeforeunload功能改變該iframe中的src。 這可能會包含歷史記錄中可能從歷史堆棧中刪除的其他網址,而不是當前網頁。

所以,歷史是這樣的:

Page3 
Page2 
Page1 

onbeforeunload改變的iframe:

Dummy 
Page3 
Page2 
Page1 

但這僅僅是可能的工作,你需要嘗試這個猜測...