2013-05-30 12 views
8

Quanto è affidabile l'evento window.onbeforeunload?Affidabilità di onbeforeunload

  1. Si accende in tutti i principali browser?
  2. Si attiva se il browser del client si arresta in modo anomalo? (Credo nelle meraviglie)
  3. È in grado di ritardare l'evento di chiusura nel caso in cui potrebbe essere necessario "un po 'di più" o verrà interrotto?
  4. Esistono alternative?
+1

1-Si, 2-n, 3-n, deve restituire una stringa sincrono oppure lo scarico continua, 4-n, è l'unico modo per interrompere possibilmente pagina viene scaricato. –

+0

grazie kolink! potresti illuminarmi, perché non hai postato questo come una risposta che potrei accettare? (Sono un po 'nuovo a questa intera cosa di StackOverflow) –

+0

Mi aspettavo completamente che questa domanda venisse chiusa come inutile. Apparentemente quello era solo io! Io vado avanti e ne faccio una risposta. –

risposta

10
  1. Sì, onbeforeunload opere in tutti i browser che io abbia mai provato su.
  2. No, se un browser si blocca, allora muore, non c'è modo di aggirare questo fatto.
  3. Ho detto "no" nel mio commento, ma dipende in qualche modo. Ad esempio, se hai un ciclo molto lungo, verrà eseguito completamente prima che la pagina si chiuda. Tuttavia, non è possibile utilizzare AJAX o qualsiasi altra funzione asincrona come setTimeout all'interno del gestore. DEVE restituire una stringa in modo sincrono per bloccare lo scaricamento.
  4. Ancora una volta, ho detto "no" nel mio commento, ma posso approfondire ulteriormente. Se si collega un gestore di eventi alla pagina per rilevare un clic su un collegamento, è possibile chiamare manualmente il gestore onbeforeunload per ottenere la risposta stringa e utilizzarlo per mostrare una casella di conferma personalizzata, annullando l'evento click mentre lo si fa. Si noti che ciò non influirà sui pulsanti di ricarica, Indietro, Avanti o Chiudi, facendo semplicemente clic su un collegamento a una nuova pagina. Si dovrebbe anche fare attenzione a non influenzare i collegamenti alle ancore sulla stessa pagina, oppure i collegamenti di tipo javascript:void(null);. Questo ti permetterà anche di fare richieste AJAX, e se l'utente conferma di voler lasciare la pagina puoi fare alcune cose prima di caricare la nuova pagina.

    Per farla breve, ci sono alternative in alcuni casi, ma tutto deriva dall'evento onbeforeunload e può essere piuttosto complesso.

Problemi correlati