2012-05-21 49 views
13

我這個簡單的代碼 -「beforeunload的Chrome版本

$(window).bind('beforeunload', function(){ 
    alert("Good Bye") 
}); 

與Firefox,IE8的偉大工程,但無法在Chrome。這是一個已知的問題還是有其他選擇?

其實我試圖做的是每當用戶嘗試關閉瀏覽器時記錄詳細信息。

function LogTime() 
{ 
    jQuery.ajax({ 
     type: "POST", 
     url: "log.php", 
     data: "", 
     cache: false, 
     success: function(response) 
     { 
     } 
    ); 
} 

$(window).bind('beforeunload', function(){ 
    LogTime(); 
}); 

這行之有效的Firefox,但不是在Chrome

+1

由於Chrome選擇這樣做,所以Chrome中的onbeforeunload對話框被阻止。 – Joseph

+0

Google Chromium團隊強烈建議您不要使用JavaScript對話框(alert(),confirm()和prompt(),因爲它們表示它們會傷害用戶,所以這可能是爲什麼它們會阻止它沒有首先與用戶交互:https://developers.google.com/web/updates/2017/03/dialogs-policy他們建議使用Notification API:https://developer.mozilla.org/en-US/ docs/Web/API/Notifications_API –

回答

13

返回一個字符串,而不是:

$(window).on('beforeunload', function(){ 
    return "Good bye"; 
});​ 
+0

我編輯了我的問題,請檢查解決方案是否可行 – skos

+0

@Sachyn我知道沒有解決方案。我只嘗試了幾次嘗試發送異步數據,但流量被Chrome阻止。 – Sampson

+0

沒錯。即使我不能在Chrome中工作。感謝您的努力。 – skos

6

嘗試以下:

$(window).on('beforeunload', function(){ 
    return "Good Bye"; 
}); 
+1

我不明白。在哪裏使用了「Good Bye」。 – Abhi

+0

截至09/10/17,Chrome版本61.0.3163.100(官方版本)(32位),它似乎不是:/ – user1063287

4

我不得不將其包含在jQuery(document)。準備使用chrome工作

<script> 
    jQuery(document).ready( 
    function() { 
     jQuery(window).bind('beforeunload', 
     function (e) { 

      [code here] 

     } 
    ); 

    } 
); 
</script> 
2

試試這個:

function LogTime(){ 

jQuery.ajax({ 
    type: "POST", 
    url: "log.php", 
    data: "", 
    cache: false, 
    success: function(response){ 

    } 
}); 

}

$(window).bind('beforeunload', function(){ 
    LogTime(); 
    return "You're leaving?"; 
}); 

看來,只要你在函數體的最後返回一個字符串這種情況下,你可以在字符串之前運行的代碼。

1

試試這個對所有的瀏覽器: -

window.addEventListener("beforeunload", function (e) { 

    var confirmationMessage = "\o/";  
    e.returnValue = confirmationMessage;   
    return confirmationMessage;  

}); 
+0

https://developer.mozilla.org/en-US/docs/網絡/活動/ beforeunload –

0

如果你只需要卸載文件之前發送一些分析數據,選擇navigator.sendBeacon()方法,而不是XMLHttpRequest的。

sendBeacon()方法用於執行非阻塞發送少量數據。

但首先檢查canIuse report,因爲該方法在全局範圍內還不受支持。