1

我有這樣一段代碼的Javascript:在IE onBeforeUnload()行爲和鉻

 
window.onbeforeunload = function(){ 
     doSomething(); 
     return "Are you sure you want to leave"; 
} 

在Firefox用戶離開頁面,DoSomething的()最先被執行,然後報警時彈出。 在IE和Chrome中,首先彈出警報,然後如果用戶決定停留doSomething() 得到執行。

有沒有辦法使IE和Chrome的行爲像FF。我想在彈出之前執行doSomething()

+0

在我的工作中,我們這樣做:'if(hasChanges &&確認('你想保存嗎?')){saveToDb(); };',我知道這不是同一個例子,但嘗試使用改變最後一行到'return confirm(「你確定要離開嗎?)'。 – Alxandr 2011-05-18 01:06:03

+0

順便說一句:http://jsfiddle.net/whd9y/在我的電腦上的所有瀏覽器(IE/FF/GC)上都是一樣的。 – Alxandr 2011-05-18 01:08:43

+0

@Alxandr :: http://jsfiddle.net/whd9y/1/在IE和FF中試試這個。在IE中,它不會更改div的html,直到用戶選擇保留在同一頁面上。 – Dhwanit 2011-05-18 01:29:26

回答

0

您使用的是哪個版本的Firefox?據我所知,沒有一個瀏覽器會讓你在onBeforeUnload上做任何事情,除了傳遞文本被包含在彈出的確認對話框中 - 所以你不能阻止用戶離開你的網站。

您不應該依賴此事件來確保用戶離開您的頁面時發生任何事情。如果重要的是將一個點擊事件處理程序分配給可以導航離開頁面的所有內容(您仍然會失去瀏覽器導航按鈕和地址欄更改)

+0

這個事件在大多數瀏覽器中都能正常工作。我已經使用它與Ajax進行數據庫更改(使用同步模式的課程),它的工作原理與它應該完全一樣。如果您希望進行一些HTML更改以吸引用戶的注意力,那麼它會有不同的行爲。 – Dhwanit 2011-05-18 01:32:48

+0

在ajax請求的情況下,只要你得到你的數據庫保存時,它不會影響通話時間。 – Dhwanit 2011-05-18 01:33:18

+0

你不能做的唯一事情就是據我所知發送XHRs。關於將點擊處理程序添加到所有內容的評論非常天真。用戶可以關閉瀏覽器,點擊後退按鈕,點擊刷新。總的來說在這個答案中沒有很好的信息 – 2011-08-18 18:12:36