2009-09-06 55 views
1

我有一個要求,當用戶點擊瀏覽器的[X]按鈕時,我應該給他們一個消息。Javascript onUnload方法問題

我使用JavaScript的onUnload方法完成了此任務。

現在,如果我刷新頁面,那麼也會出現相同的消息!

爲什麼這是如此以及如何克服?

的代碼是在這裏

< DOCTYPE HTML PUBLIC! 「 - // W3C // DTD HTML 4.0過渡// EN」 > <HTML> <HEAD> < SCRIPT LANGUAGE = 「JavaScript的」 >

函數消息()

{ 警報(「你SRE您灣離開?「); }

< /腳本> </HEAD >

< BODY onunload的= 「消息();」 > </BODY > </HTML >

請幫

回答

6

這是正確的行爲:刷新頁面,包括卸載,然後重新裝入。

接近這樣一個確認對話框,最好的方法是這樣的代碼:

<script language="javascript" type="text/javascript"> 
window.onbeforeunload = function() { 
    return "You have unsaved changes."; 
} 
</script> 

這就是你看到的機制,例如,Gmail的,如果你試圖關閉網頁時,你的消息不是招」沒有被保存或發送。嘗試刷新頁面時它仍然會觸發,因此確保只有在確實存在未保存的工作時才返回錯誤字符串很重要。

請注意,無法保證onUnloadonBeforeUnload事件會觸發,因爲不能保證您的訪問者甚至已啓用JavaScript,因此您不應該將此用於任何事情,而不僅僅是對未保存工作的友好提醒。

+9

+1「您有未保存的更改」是卸載確認的唯一理由。那些纏着「請留在這個可愛的網站」留言的網站對網絡來說是一種犯罪行爲,產生這些網站的設計師將受到國際網絡司法法庭的起訴和嚴厲懲罰。 – bobince 2009-09-06 23:36:11

+2

bobince for web presidency! :) – vsync 2009-10-22 13:31:03

+0

@bobince - 但有些人會用它作爲垃圾郵件,'單擊停留優惠券50%!'(-_-) – 2012-05-10 03:06:37

2

不幸的是,沒有javascript事件來檢測X按鈕的單擊(關閉了browswer)。我們最接近的是onunload或onbeforeunload事件。而且,是的,無論用戶選擇離開頁面的方式如何,它們都會觸發。無論是關閉瀏覽器,點擊鏈接,輸入另一個URL或重新加載頁面。這是你發現的。

不知道這是否會解決你的問題,因爲我們StackOverflowers不知道你的應用程序做,但你可以創建一個類似的雜牌組裝電腦:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
<head> 
<script type="text/javascript"> 
function Message() 
{ 
    if (reallyExiting) alert("Are you sure you want to leave?"); 
} 

</script> 
</head> 
<body onload="reallyExiting=true;" onunload="return Message();"> 
<a href="example.html" onclick="reallyExiting=false">Not really leaving</a> 
<a href="http://www.someOtherSite.com">Really leaving</a> 
</body> 
</html> 

我知道它的粗糙,但你可以根據具體情況,使用一些類似的變量來跟蹤他們所擊中或未擊中的鏈接。

HTH。

+0

我認爲它應該是'return Message();'而不是'Message ();'... – 2012-05-10 03:08:06

+0

已更新的答案。謝謝@Derek。 – Rap 2012-05-10 14:36:38