2009-05-21 3 views
9

a volte uso il codice di debug per avvisare qualcosa in javascript (ad esempio, corrispondente a qualcosa nell'espressione regolare), ma dimentico un modificatore e l'avviso è in un ciclo infinito (o se il ciclo corrisponde al modello 300 volte). Se si utilizza Firefox, l'avviso continua a uscire e non c'è modo di chiudere nemmeno la scheda, la finestra o l'app.se faccio un errore nel codice e causo un ciclo infinito in javascript e continua a chiamare alert(), c'è una via d'uscita per fermare il loop?

Se forzo l'uscita, chiuderà tutte le schede e anche altre finestre di Firefox ... c'è davvero un modo per fermare il loop più facilmente?

+0

Dato che non stai chiedendo come modificare il codice, questo appartiene davvero a SuperUser. È un'istanza accidentale dei classici siti di messaggi di allerta senza fine. – Jerph

risposta

17

La risposta breve è: No.

Questa è una buona ragione per usare Firebug e la funzione console.log. Il che, ironia della sorte, causerà la "interruzione dello script perché sta scappando la finestra di dialogo" per non essere visualizzato in alcuni casi, il che significa che sei tornato esattamente dove sei ora.

Chrome e Opera dispongono di questa funzionalità. IE no, neanche Apple Safari lo fa.

Non una soluzione nativa, ma si potrebbe provare questo script rattoppa-: http://www.tumuski.com/2008/05/javascript-alert-cancel-button/

Inoltre, è potrebbe semplicemente ignorare la funzione di allarme di utilizzare una conferma di dialogo, invece, e interrompere la visualizzazione allarmi se la conferma viene annullata:

var displayAlerts = true; 

E poi:

function alert(msg) { 
    if (displayAlerts) { 
    if (!confirm(msg)) { 
     displayAlerts = false;   
    } 
    } 
} 
+1

Sì, Opera ha una casella di controllo "Interrompi l'esecuzione degli script in questa pagina" nella parte inferiore delle finestre di avviso –

+3

Questo non è più vero, vedere la risposta di Alex Key sotto. – TrojanName

2

Google Chrome consente di impedire che vengano visualizzati ulteriori avvisi.

+1

Penseresti che sarebbe stata una caratteristica ovvia per tutti i browser. – ceejayoz

+0

Mi ha sempre sorpreso che il browser non avesse questo. Grazie a Dio Chrome l'ha introdotto. –

0

In nessun modo. Per fortuna la maggior parte dei browser ha una protezione di ricorsione infinita, ma è fuori programma.

5

Sembra che si può in firefox:

  1. tenere premuto CTRL
  2. HOLD enter
  3. Premere F4 volta

Secondo il post sul blog, non funziona in tutti i casi , maggiori informazioni qui: puremango.co.uk

+1

btw. Ti consiglio di utilizzare console.log, ma se ti trovi in ​​un ciclo alert() (come ho appena fatto, è una buona via di fuga). –

+1

Eccellente: le persone dovrebbero ancora usare la console;), ma questa è una maggiore opinione e, nello spirito di questa antica domanda, ho messo in risalto la tua risposta. – cgp

+1

Completamente d'accordo @altCognito (+1); la console è nel 99,99% delle volte l'opzione migliore. Una situazione che ho trovato dove un alert() è utile in alcuni browser sta catturando le variabili appena prima di chiudere una finestra nel codice di terze parti. per esempio. Quando si esegue il debug di materiale didattico di e-learning di terze parti che spesso avvia azioni quando la finestra viene chiusa. Firebug manterrà l'output della console dopo una chiusura della finestra, ma gli altri browser no. –

0

[testato su IE 11] Se è necessario chiudere il browser Web e non ant per ctrl-alt-del per qualsiasi motivo (nel mio caso il mio ciclo di avviso infinito javascript negativo era in esecuzione su citrix che ricaricherà automaticamente la mia ultima sessione dopo un ctrl-alt-del dalla memoria cache che non riesco a cancellare)

è possibile insinuarsi l'errore da tenendo premuto alt-F4 e lo spamming X (per chiudere la finestra del browser).

Questo funziona molto velocemente ... L'alt-F4 chiude le finestre di avviso molto velocemente e noterai il pulsante X nella parte superiore del tuo sfarfallio del browser. Questo ti dà finestre di tempo molto piccole in cui puoi chiuderlo tra gli avvisi.

Nota: se sono aperte più schede, è necessario prima chiuderle dall'icona nella barra di controllo nella parte inferiore dello schermo perché il messaggio "Chiudi tutte le schede" interferirà.

Problemi correlati