Quando utilizzo il pulsante Indietro su Firefox per raggiungere una pagina visitata in precedenza, gli script su quella pagina non verranno più eseguiti.
È corretto e questa è una buona cosa.
Quando si colpisce un collegamento in Firefox (e Safari e Opera), non distrugge immediatamente la tua pagina per passare a quella successiva. Mantiene intatta la pagina, semplicemente nascondendola alla vista. Se premi il pulsante Indietro, la vecchia pagina tornerà in vista, senza dover caricare nuovamente il documento; questo è molto più veloce, risultando in transizioni di pagina avanti / indietro più fluide per l'utente.
Questa funzionalità è chiamata bfcache .
Qualsiasi contenuto aggiunto alla pagina durante il caricamento precedente dell'utente e il suo utilizzo sarà ancora lì. Tutti i gestori di eventi che hai allegato agli elementi della pagina saranno comunque allegati. Eventuali timeout / intervalli impostati saranno ancora attivi. Quindi raramente c'è motivo per cui devi sapere di essere stato nascosto e mostrato nuovamente. Sarebbe sbagliato richiamare onload
o incorporare nuovamente il codice dello script, perché qualsiasi associazione e generazione di contenuto eseguita in quella funzione verrebbe eseguita una seconda volta sullo stesso contenuto, con risultati potenzialmente disastrosi. (es. document.write
nello script inline distruggerebbe completamente la pagina.)
Il motivo per cui scrivere in window.onunload
ha un effetto è che i browser che implementano bfcache hanno deciso che, per compatibilità con le pagine che hanno davvero bisogno di sapere quando vengono scartate, qualsiasi pagina che dichiari interesse a sapere quando si onunload
verifica farà sì che bfcache a essere disabilitato. Quella pagina verrà caricata di nuovo quando torni ad essa, invece di essere recuperata da bfcache.
Quindi, se imposti window.onunload= function() {};
, ciò che stai effettivamente facendo è deliberatamente rompere il bfcache. Ciò comporterà una navigazione lenta nelle tue pagine e non dovrebbe essere utilizzata se non come ultima risorsa.
Se hai bisogno di sapere quando l'utente lascia o torna alla tua pagina, senza rovinare il bfcache, puoi invece intercettare gli eventi onpageshow
e onpagehide
:
window.onload=window.onpageshow= function() {
alert('Hello!');
};