2009-08-30 5 views
5

Je sais qu'on peut ajouter un écouteur d'événement pour window.error.Comment faire pour attraper les erreurs JavaScript dans toutes les Iframes (avec window.error)?

Cependant, lorsque vous travaillez avec des Iframes, chaque iframe a son propre élément de fenêtre, et window.error doit être créé pour chaque iframe.

Est-il possible de définir en quelque sorte un gestionnaire d'événements d'erreur dans un emplacement, où toutes les erreurs déclencheront cette méthode spécifique?

Répondre

5

Cela pourrait fonctionner.

function myHandler(msg, url, line){ 
    //do stuff here... 
} 

//hook in all frames... 
function addErrorHandler(win, handler){ 
    win.onerror = handler; 
    for(var i=0;i<win.frames.length;i++){ 
    addErrorHandler(win.frames[i], handler); 
    } 
} 
//start with this window... and add handler recursively 
addErrorHandler(window, myHandler); 
+0

Merci pour cela. semble bien, bien que ne semble pas être parfait pour mon application - IFrames et fenêtres sont créés à la volée sans que je puisse contrôler beaucoup d'entre eux, donc je ne peux pas savoir à l'avance tous les objets de gagner. Je suppose qu'il n'y a pas de manière globale de gestion des erreurs dans la fenêtre IE? Merci, Tal. – Tal

+0

ah, dans ce cas ... dans chaque trame que vous créez, ajoutez simplement ... window.onerror = top.myHandler; – scunliffe

+0

oui ... mais je ne sais pas à l'avance quelle serait la source de l'Iframe. (en utilisant le formulaire submit au IFrame cible) - le window.onerror devrait être dans le code IFrame lui-même .. – Tal

2

Je n'ai pas essayé ceci alors s'il vous plaît ne me pendre pas pour cela :-) Dans la fenêtre maître/parent qui contient toutes les iframes, vous pouvez créer votre fonction de remise d'erreur là. Ensuite, utilisez jQuery pour récupérer tous vos iFrames dans votre page et enregistrez le gestionnaire .error pour qu'il pointe vers votre fonction enregistrée dans la fenêtre parente.

PS: De plus en étaient sur le thème de la gestion des erreurs javascript, c'est assez cool aussi: https://damnit.jupiterit.com/

Questions connexes