2012-08-29 45 views
10

此代碼在Firefox上運行良好,但我無法使Chrome卸載事件在Chrome上工作了。 Chrome是否停止支持卸載事件?我無法在Chrome中觸發卸載事件

這是我的代碼:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title></title> 

<script type="text/javascript" src="../jquery/jquery.js"></script> 

<script type="text/javascript"> 

    function pageHidden(evt) { alert("Are you sure 1?"); } //WORKS ON FIREFOX BUT NOT IN CHROME 
    window.addEventListener("pagehide", pageHidden, false); 

    window.onunload = function() { alert("Are you sure 2?"); } //TRIGGERS ON LOAD NOT ON UNLOAD 

    $(window).unload(function() { //WORKS ON FIREFOX BUT NOT IN CHROME 
     alert("Are you sure 3?"); 
    }); 

</script> 
</head> 

<body> 
TEST WEBSITE 
<a href="http://www.iamawesome.com">external link</a> 
</body> 
</html> 

我怎樣才能卸載事件在Chrome中工作?

謝謝!


答: 請勿用警報卸載事件;)

+1

可能的重複:http://stackoverflow.com/questions/803887/can-i-pop-up-a-confirmation-dialog-when-the-user-is-closing-the-window-in-safari –

+0

你不會在代碼中的任何地方觸發任何東西。你只是綁定處理程序。 – jbabey

+0

檢查[此錯誤報告](http://bugs.jquery.com/ticket/10509)。簡而言之,它不適用於Chrome;儘量使用'.onunload'處理程序,但即使這也可能是「固定的」。 ) – raina77ow

回答

14
window.onunload = alert("Are you sure 2?"); 

這是不正確。要設置onunloadalert結果,你需要將其設置爲一個功能:

window.onunload = function(){ 
    alert("Are you sure?"); 
} 

如果你想使用jQuery,這將在所有的瀏覽器。

$(window).unload(function() { 
    alert("Are you sure?"); 
}); 

注意:可能似乎像它無法在Chrome中工作,但它是。這是因爲Chrome在onunload事件中阻止alert

+1

這是問題,Chrome阻止了我的所有警報,我嘗試了一個console.log,它工作正常。 ! –

+0

不客氣:-) –

+2

如果您使用警報,您應該會在Chrome控制檯中看到錯誤。 –

2

嘗試:

window.onbeforeunload = function() { 
    // code 
}; 

window.onpagehide = function() { 
    // code 
}; 
+0

謝謝Korikulum!我試過這個,但它沒有顯示我在每個函數內寫入的警報消息 –

+0

onpagehide是一個有用的事件要知道,但你不能相信它會在每次頁面消失時被調用。例如,如果啓動一個新選項卡,然後關閉整個瀏覽器,則該事件可能不會觸發。 –

1

你不會觸發任何東西 - 你只需執行你想添加的表達式作爲一個處理程序:

window.onunload = function(event) { 
    alert("Are you sure 2?"); 
}; 
+0

仍然無法正常工作,我可以退出該頁面,並且警報消息不會顯示:( –

1

從我看過的內容來看,Chrome一旦觸發事件就會阻止警報。你可以運行一些函數,但是,並不是任何與用戶交互的東西。

window.onbeforeunload in Chrome: what is the most recent fix?看來,如果你想要做的只是彈出確認消息,你必須通過返回一個字符串與你設置的回調函數中的消息來完成。

window.onbeforeunload = function() { 
    // Some wrap up code (no alerts, confirms, redirects, etc) 
    return 'My confirmation messsage'; 
} 

然後文本「我的確認信息」將顯示在Chrome選擇的確認對話框中。 Firefox會記錄此行爲here

+0

謝謝你這爲我工作和網格與我目前的設計 – Callat