2009-11-18 6 views
4

J'ai une classe d'exception personnalisée que j'utilise pour une situation particulière. Il pourrait être jeté de n'importe où alors essayer/attraper n'est pas vraiment pratique.Attraper une exception javascript personnalisée avec window.onerror - dans IE

throw new CustomException; 

Je veux attraper cette erreur dans window.onerror et filtrer dehors, qui fonctionne très bien dans la plupart des navigateurs, je l'ai testé jusqu'à présent.

var window_onerror = window.onerror || function() {return false;}; 
window.onerror = function(message, url, line) { 
    if (message.match(CustomException.prototype.name)) { 
    return true; 
    } else { 
    return window_onerror(message, url, line); 
    } 
}; 

Cependant, dans IE la fonction window.onerror reçoit Exception thrown and not caught au lieu de mon exception personnalisée.

Répondre

1

Je ne connais aucun moyen de récupérer l'objet jeté dans le gestionnaire onerror. Pour contourner ce problème, je vous suggère de lancer une erreur d'exécution générique avec un message personnalisé, à savoir

throw new Error('foo') 

et vérifier

message === 'foo' 

dans la fonction de gestionnaire.

modifier: exemple de code de travail:

window.onerror = function(message, url, line) { 
    alert(message === 'foo'); 
    return true; 
}; 

throw new Error('foo'); 
+0

Je vous concède que cela fonctionne dans IE, (ce que j'ai demandé) mais Firefox ne rapporte que "Script Error" avec cette technique. –

+0

@Justin: fonctionne bien pour moi - pouvons-nous voir du code? – Christoph

+0

http://bitbucket.org/JustinLove/module/src/4f80d66afb94/ Voir script/CGD/Module.js testé dans QUnit/index.html Throw est en ligne 126, avec la définition d'exception et gestionnaire à partir du –

2

Nous avons un gestionnaire universel d'exception que nous utilisons sur Exceptioneer.com mais chaque navigateur se comporte différemment et signale les mêmes exceptions de différentes manières.

En outre, différentes versions localisées du navigateur agissent de différentes manières, par exemple, j'ai vu des erreurs Javascript en russe de la part de certains de nos utilisateurs - pas la chose la plus simple au monde à analyser.

Ce script vous permettra de voir comment les différents navigateurs agissent à des erreurs: -

window.onerror = function(message, uri, line) { 
    var fullMessage = location.href + '\n' + uri + '\n' + line; 
    alert(fullMessage); 
    return false; 
} 

Merci,

Phil.

+1

196. shouldn » t vous incluez 'message' dans la variable' fullMessage'? – ajsharma

Questions connexes