2012-08-29 16 views
10

Questo codice funziona correttamente su Firefox, ma non riesco più a far funzionare l'evento di scarico su Chrome. Chrome ha smesso di supportare l'evento di scarico?Impossibile avviare l'evento di scaricamento in Chrome

Questo è il mio codice:

<!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> 

Come posso ottenere l'evento unload per lavorare in Chrome?

Grazie!


RISPOSTA: Non testare l'evento unload con avvisi;)

+1

Possibile dupe: http://stackoverflow.com/questions/803887/can-i-pop-up-a-confirmation-dialog-when-the-user-is-closing-the-window-in-safari –

+0

non stai attivando nulla da nessuna parte nel tuo codice. sei solo un gestore impegnativo. – jbabey

+0

Controllare [questo bug report] (http://bugs.jquery.com/ticket/10509). In breve, non funzionerà in Chrome; prova ad usare invece il gestore '.onunload', ma anche quello potrebbe essere 'riparato'.) – raina77ow

risposta

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

Questo non è corretto. Si sta impostando onunload al risultato di alert, è necessario impostare ad una funzione:

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

Se si desidera utilizzare jQuery, questo funzionerà in tutti i browser.

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

NOTA: Potrebbe sembrare come non funziona in Chrome, ma è. Questo perché Chrome blocca alert s nell'evento onunload.

+1

Questo era il problema. Chrome stava bloccando tutti i miei avvisi.Ho provato un console.log e funziona bene. Grazie per la risposta rapida ! –

+0

Prego :-) –

+2

Se si utilizzano gli avvisi, si dovrebbe vedere un errore nella console di Chrome. –

2

Prova:

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

o

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

Grazie Korikulum! Ho provato questo ma non visualizza il messaggio di avviso che scrivo all'interno di ogni funzione. –

+0

onpagehide è un evento utile da conoscere, ma non ci si può fidare che venga richiamato ogni volta che una pagina scompare.Ad esempio, se si avvia una nuova scheda e quindi si chiude l'intero browser, l'evento potrebbe non essere attivato. –

1

Non si attivano nulla - esegui semplicemente l'espressione che vuoi aggiungere come un gestore:

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

Ancora non funziona, posso uscire dalla pagina e il messaggio di avviso non verrà visualizzato :( –

1

Da quello che ho letto sembra Chrome blocca gli avvisi una volta che l'evento è stato attivato. È possibile eseguire alcune funzioni, tuttavia, solo non tutto ciò che interagisce con l'utente sembra.

Da window.onbeforeunload in Chrome: what is the most recent fix?, a quanto pare, se tutto ciò che si vuole fare è apparire un messaggio di conferma, è necessario farlo restituendo una stringa con il messaggio dalla funzione impostata come richiamata.

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

Il testo "Il mio messaggio di conferma" verrà quindi visualizzato in un dialogo di conferma scelto da Chrome. Firefox documenta questo comportamento here.

+0

Grazie a questo ho lavorato per me e mi sono adattato bene al mio attuale design – Callat