2014-06-06 311 views
0

我試過Chrome,FireFox和Safari上的代碼。仍然onbeforeunload不會觸發。我也嘗試了onunload,但它沒有奏效。爲什麼onbeforeunload事件不會觸發

這是我正在試驗的代碼。

<!doctype html> 
<html lang="en"> 
<head> 
    <title> Output to a Page </title> 
    <meta charset="utf-8"> 
    <script> 
    window.onload = init; 
    window.onclick = clk; 
    window.onbeforeunload = closing; 
    function clk() { 
     window.alert("Ouch !!"); 
    } 
    function closing() { 
     console.log("function alrt WORKS !!!!"); 
     window.alert("closing now....."); 
    } 
    function init() { 
     var output = ""; 
     for (var mms = 5; mms > 0; mms--) { 
     if (mms >= 3) { 
      output += "Still lots of M&amp;Ms left, so eat more!<br>"; 
     } else { 
      output += "Getting low on M&amp;Ms, take it easy!<br>"; 
     } 
     } 
     output += "All out of M&amp;Ms"; 
     var e = document.getElementById("output"); 
     e.innerHTML = output; 
    } 

    </script> 
</head> 
<body> 
    <p id="output"></p> 
</body> 
</html> 

回答

15

onbeforeunload事件不會可取消的,因爲安全的原因,但如果對onbeforeunload事件的事件處理函數返回一個字符串值,該文本將在確認對話框中,用戶在那裏顯示可以確認他是想留下還是離開當前頁面。

注意事件偵聽器不能註冊爲onbeforeunload事件與addEventListenerattachEvent方法(僅適用於Safari和谷歌瀏覽器支持的話)。對於跨瀏覽器解決方案,請在HTML(具有body元素的onbeforeunload屬性)或window對象的onbeforeunload內聯事件屬性中註冊事件處理程序。詳情請參閱下面的例子。

例子:

在HTML:

<ELEMENT onbeforeunload="handler">

在JavaScript:

object.onbeforeunload = handler;       
object.addEventListener ("beforeunload", handler, useCapture); 

操作是調用onbeforeunload事件:

  1. 直接在瀏覽器中或通過鏈接導航到另一頁。
  2. 關閉當前瀏覽器窗口或標籤頁。
  3. 重新加載當前頁面。
  4. 通過JavaScript中的位置對象操作當前加載的頁面的URL。
  5. 調用window.navigate方法。
  6. 調用window.opendocument.open方法在同一窗口中打開文檔。

嘗試修改你的代碼,就像這樣:

window.onbeforeunload = closing; 
/* other code here */ 

var closing = function() { 
     console.log("function alrt WORKS !!!!"); 
     window.alert("closing now....."); 
     } 

...或者只是把直接在代碼中你body標籤:

<body onbeforeunload="alert('function alrt WORKS !!!!')">

爲見herehere更多細節。

+0

目前這是我能夠爲onbeforeunload事件實現完全跨瀏覽器支持的唯一方式(Firefox在某些情況下不會觸發它)。感謝這個偉大的答案! – user3351605

-1

我面臨的問題是,beforeunload和onunload都不能執行一個在用戶關閉瀏覽器時應該調用的ajax調用。事實上,這些方法都沒有奏效。 javascript方法在body標籤中,這實際上是問題所在。當我在Head標籤中移動javascript方法時,它神奇地解決了。

+0

你能分享一個代碼示例嗎?我不太清楚你的意思。 –

相關問題