2009-04-29 16 views
5

In IE e FF, posso associare un gestore di eventi a onBeforeUnload e passando una stringa a una proprietà dell'evento, l'utente vedrà una finestra di dialogo che gli chiederà se vuole continuare con lo "scarico" (o chiudendo il finestra o navigando lontano).Posso aprire una finestra di dialogo di conferma quando l'utente sta chiudendo la finestra in Safari/Chrome?

Safari e Chrome non supportano onBeforeUnload e onUnload sembra essere troppo tardi. C'è qualche modo per replicare la stessa funzionalità in Safari/Chrome?

NOTA: non sto cercando di mantenere l'utente in ostaggio. So che questo è fastidioso e non cool. In effetti, il mio sito fa di tutto per permettere all'utente di andare liberamente e avere tutto al suo posto quando tornano. Tuttavia, sto ospitando altri siti all'interno di IFrames, ea volte questi decidono di sbarazzarmi di me e di prendere il controllo del browser, che è quello che sto cercando di evitare.

Grazie!

+0

Si noti che è generalmente considerato scortese disp collocare i siti di altre persone nelle proprie cornici e c'è stata una grossa protesta quando Digg lo ha fatto di recente. –

+0

Lo so, e grazie per il suggerimento. Tuttavia, abbiamo un obiettivo MOLTO diverso da quello di Digg, e (almeno crediamo) abbiamo una buona ragione per farlo, fornisce alcune funzionalità reali. –

risposta

7

Questo funziona perfettamente per me sia in Chrome e Safari:

<html><body><p>Test</p> 
<script>window.onbeforeunload = function() { return "Sure?"; }</script> 
</body></html> 

Quando provo a chiudere la finestra, ottengo il prompt.

+0

Hmmmmmmm. Questo è strano ... Il mio codice non funzionava in Safari. Forse è perché stavo usando Prototype's Event.observe() per collegare il gestore ... Comunque, grazie mille! Mi hai reso la vita molto più semplice! –

+0

@RichieHindle Posso richiamare la finestra genitore per aggiornare quando chiudo il bambino usando questo metodo? o posso lasciare che questa chiami un'altra funzione js invece di conferma? – raym0nd

+0

@ raym0nd: Il gestore 'onbeforeunload' ha un sacco di restrizioni su cosa può fare. Non sono esattamente sicuro di cosa si tratti, e sono suscettibili di variare tra i vari browser. Dovresti testarlo, ma sarei dubbioso che funzionerebbe ovunque, ora e in futuro. – RichieHindle

2

StackOverflow stesso utilizza onbeforeunload, e funziona bene per me in Safari:

function setConfirmUnload(a){window.onbeforeunload=a?function(){return a}:null} 
2

ho controllato in cromo e sembra funzionare bene usando questo:

<body onunload="alert('x');" onbeforeunload="test1();"> 
+0

La domanda originale dice che "onUnload sembra essere troppo tardi". –