Comment mon iPhone (Objective-C du code informé des erreurs Javascript dans une UIWebView?
J'ai besoin d'avoir mon iPhone (Objective-C du code de capture des erreurs Javascript dans une UIWebView. Qui comprend les exceptions non traitées, des erreurs de syntaxe lors du chargement des fichiers, undefined variable références, etc.
C'est pour un environnement de développement, de sorte qu'il n'a pas besoin d'être SDK-casher. En fait, il n'a vraiment besoin de travailler sur le simulateur.
J'ai déjà trouvé certaines caché WebKit astuces pour par exemple, exposer Obj-C objets JS et d'intercepter alerte fenêtres pop-up, mais celui-ci échappe toujours me.
[NOTE: après cette annonce je n'ai trouver un moyen de débogage à l'aide d'un délégué. Est-il un moyen à moindre frais généraux, à l'aide de la console d'erreur /de l'inspecteur web?]
Vous devez vous connecter pour publier un commentaire.
J'ai maintenant trouvé un moyen à l'aide du débogueur de script crochets dans WebView (remarque, PAS UIWebView). J'ai d'abord dû à la sous-classe UIWebView et ajouter une méthode comme ceci:
Ensuite, vous devez créer un YourScriptDebugDelegate classe qui contient des méthodes comme celles-ci:
Il y a sans doute un grand exécution de l'impact de cette, comme le débogage délégué peut également vous fournir des méthodes pour être appelé pour entrer et sortir d'un cadre de pile, et pour l'exécution de chaque ligne de code.
Voir http://www.koders.com/noncode/fid7DE7ECEB052C3531743728D41A233A951C79E0AE.aspx pour l'Objective-C++ définition de WebScriptDebugDelegate.
Ceux d'autres méthodes:
Noter que c'est tous cachés dans un cadre privé, donc, ne pas essayer de mettre cela dans le code, vous soumettre à l'App Store, et être prêt pour une certaine hackery pour le faire fonctionner.
J'ai créé une belle petite goutte dans la catégorie que vous pouvez ajouter à votre projet...
Il est basé sur Robert Sanders solution. Bravo.
Vous pouvez le télécharger ici:
UIWebView+Debug
Cela devrait rendre beaucoup plus facile à déboguer vous UIWebView 🙂
J'ai utilisé la solution proposée à partir de Robert Sanders: Comment mon iPhone (Objective-C du code informé des erreurs Javascript dans une UIWebView?
Que crochet pour webkit fonctionne très bien aussi sur iPhone. Au lieu de la norme UIWebView je alloué dérivés MyUIWebView. J'avais besoin aussi de définir caché classes à l'intérieur de MyWebScriptObjectDelegate.h:
@class WebView;
@class WebFrame;
@class WebScriptCallFrame;
Dans le sdk ios 4.1 la fonction:
est obsolète et au lieu de cela j'ai utilisé la fonction:
Aussi, je reçois des avertissements ennuyeux comme "NSObject peut ne pas répondre -windowScriptObject" parce que l'interface de classe est caché. Je les ignore et il fonctionne à nice.
D'une manière qui fonctionne pendant le développement si vous avez Safari v 6+ (je ne suis pas certain que la version iOS dont vous avez besoin) est d'utiliser le Safari des outils de développement et de crochet dans la UIWebView à travers elle.
Simple: Placez ce code sur le dessus de votre contrôleur/vue à l'aide de la UIWebView
Et puis instancier comme ceci:
À l'aide de #ifdef DEBUG assure qu'il n'est pas aller dans la libération de la construction, mais je vous recommande également les commentaires quand vous ne l'utilisez pas, puisqu'il a un impact sur les performances. Le crédit va à Robert Sanders et Prcela pour le code d'origine
Aussi si l'utilisation de l'ARC, vous pouvez avoir besoin d'ajouter "-fno-objc-d'arc" pour éviter certaines erreurs de build.
J'ai créé un kit de développement logiciel casher erreur journaliste qui comprend:
Il fait partie de la QuickConnectiPhone le cadre est disponible à partir de le projet sur sourceForge
Il y a même un exemple d'application qui montre comment envoyer un message d'erreur à l'Xcode terminal.
Tout ce que vous devez faire est d'entourer votre code JavaScript, y compris des définitions de fonction, etc. avec try catch. Il devrait ressembler à ceci.
Il ne fonctionne pas vraiment bien avec des erreurs de compilation, mais fonctionne avec tous les autres. Même les fonctions anonymes.
Le développement blog est ici
est ici et inclut des liens vers le wiki, sourceForge, le groupe google et twitter. Peut-être que ce serait vous aider.
Je l'ai fait dans le firmware 1.x, mais pas 2.x.
Voici le code que j'ai utilisé dans 1.x, il devrait au moins vous aider sur votre chemin.
Voir la gestion des exceptions dans iOS7:
http://www.bignerdranch.com/blog/javascriptcore-example/
De l'installation de la WebViewJavascriptBridge ,
ensuite écraser la console.la fonction d'erreur.
En javascript
En Objective-C
Une solution plus simple pour les certains cas peut-être juste ajouter Firebug Lite à la page Web.