2009-07-08 17 views
6

Sto sviluppando un'applicazione DHTML/Javascript che si basa su alcune funzioni avanzate (manipolazione DOM, AJAX, comunicazione Flash e altro). Sono molto preoccupato per la funzionalità - se si verificano problemi, anche dopo che l'applicazione è stata implementata, voglio essere sicuro di sapere perché e come risolverli - e inoltre, voglio assicurarmi che l'utente possa continuare a usare l'applicazione, possibilmente con funzionalità ridotte se l'eccezione era grave.Robusta gestione delle eccezioni Javascript

Attualmente dispongo di un sistema di gestione delle eccezioni e della registrazione costruito in base al quale le funzioni possono generare registri e, se viene rilevata un'eccezione, tutti i registri mi vengono inviati via email. Il sistema funziona bene, ma mi piacerebbe renderlo più robusto. Sto cercando suggerimenti.

Un'idea che ho è di racchiudere il corpo di ogni funzione javascript in un blocco try/catch e al rilevamento di un'eccezione, registrare il nome della funzione e quindi lanciare l'errore al gestore globale. Ma questo è un sacco di codice solo per rintracciare la funzione in cui si è verificata l'eccezione.

Qualche idea per rendere le eccezioni del runtime più facili da trovare e riprodurre?

risposta

4

piuttosto che fare con l'aggiunta di blocchi/catch N cercare di N funzioni, potrebbe essere più facile da usare l'evento window.onerror.

Il kit JavaScript ha a series of examples che è possibile utilizzare. Soprattutto il 3rd:

window.onerror = function (msg, url, line) { 
    alert('Error message: ' + msg + '\nURL: ' + url + '\nLine Number: ' + line); 
    return true; 
} 

Se preferite una traccia dello stack, si potrebbe verificare Eric Wendelin's (o Luke Smith's update). È uno dei pochi che conosco che tenta di lavorare su un browser.

+1

In realtà sto già recuperando tutte le eccezioni con il mio gestore di eccezioni gloabl e utilizzando anche il suo stack trace ... il problema è, in IE (dove si verificano la maggior parte degli errori) la traccia è solo una lunga lista di "funzioni anonime" e in realtà non mi dà alcun indizio su dove sia effettivamente avvenuta l'eccezione ... – Josh

+0

Nessun altro ha risposto a questo ... quindi immagino che la tua risposta sia la migliore ... :-) – Josh

+0

@Josh - Credo in 'finestra .onerror' potrebbe non rilevare errori nei gestori di eventi jQuery - http://stackoverflow.com/questions/205688/javascript-exception-handling – ripper234