2012-05-21 7 views
13

ho questo semplice pezzo di codice -'beforeunload' Chrome Problema

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

funziona alla grande con Firefox, IE8 ma non in Chrome. È un problema noto o esiste un'alternativa?

In realtà quello che sto cercando di fare è registrare i dettagli ogni volta che l'utente tenta di chiudere il browser.

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

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

Questo funziona bene in Firefox, ma non in Chrome

+1

Le finestre di dialogo sono bloccate per "onbeforeunload" in Chrome perché Chrome ha scelto di farlo. – Joseph

+0

Il team di Google Chromium consiglia vivamente di ** non ** utilizzare le finestre di dialogo JavaScript ('alert()', 'confirm()' e 'prompt()') poiché dichiarano che danneggiano gli utenti, quindi questo è probabilmente il motivo per cui bloccano senza prima un'interazione dell'utente: https://developers.google.com/web/updates/2017/03/dialogs-policy Si consiglia di utilizzare l'API di notifica: https://developer.mozilla.org/en-US/ docs/Web/API/Notifications_API –

risposta

13

Ritorna una stringa invece:

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

Ho modificato la mia domanda, Si prega di verificare se è possibile una soluzione – skos

+0

@Sachyn non conosco nessuna soluzione. Ho appena provato alcuni tentativi di inviare dati asincroni, ma il traffico è bloccato da Chrome. – Sampson

+0

Giusto. Anche io non posso farlo funzionare in Chrome. Grazie per i tuoi sforzi però. – skos

6

Prova di seguito:

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

non capisco. dove è usato il "Good Bye". – Abhi

+0

Come al 09/10/17, Chrome versione 61.0.3163.100 (build ufficiale) (32-bit), non sembra essere:/ – user1063287

4

ho dovuto includere in un jQuery (document) .ready per farlo funzionare in chrome

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

      [code here] 

     } 
    ); 

    } 
); 
</script> 
2

Prova questo:

function LogTime(){ 

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

    } 
}); 

}

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

Sembra che fino a quando si ritorna una stringa per questo evento alla fine del corpo della funzione, è possibile eseguire codice prima che stringa .

1

Prova questo per tutti i browser: -

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

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

}); 
+0

https://developer.mozilla.org/en-US/docs/ Web/Eventi/beforeunload –

0

Se avete bisogno di inviare alcuni dati analitici poco prima dello scarico il documento, scegliere navigator.sendBeacon() metodo invece di XMLHttpRequest.

Il metodo sendBeacon() è progettato per eseguire l'invio non bloccante di una piccola quantità di dati.

Ma controllare prima il canIuse report, poiché il metodo non è ancora supportato globalmente.

Problemi correlati