web-dev-qa-db-fra.com

Quelles sont les méthodes pour déboguer Javascript à l'intérieur d'un UIWebView?

J'essaie de comprendre pourquoi quelque chose avec Javascript ne fonctionne pas dans un UIWebView. À ma connaissance, il n'existe aucun moyen de définir un point d'arrêt à l'intérieur de XCode pour un fichier js. Pas de problème, je vais simplement revenir en 2004 et utiliser des statistiques d'alerte - oh, attendez-vous, ils ne semblent pas fonctionner non plus dans UIWebView!

La seule chose à laquelle je pouvais penser, c’est d’exporter mes fichiers HTML et JS sur mon bureau, puis de faire le débogage dans Safari. Et ça marche! Mais bien sûr, le bogue contre lequel je me bats dans UIWebView ne se produit pas dans Safari.

Existe-t-il d'autres méthodes de débogage à l'intérieur d'un UIWebView ou des astuces que je peux utiliser, similaires à l'utilisation de la méthode d'alerte old-school?

127
bpapa

Si vous utilisez iOS> = 6 et que vous avez Mountain Lion (10.8) ou Safari> = 6, vous pouvez simplement:

  1. Ouvrez l'application dans le simulateur (ou votre appareil dans XCode> = 4.5.x).
  2. Open Safari (allez à Preferences -> Advanced et assurez-vous que "Show Develop Menu in Menubar" est activé.
  3. Dans la barre de menus (de Safari), sélectionnez Develop -> iPhone Simulator -> [your webview page].

C'est ça !

262
refaelos

Cette requête dépasse Google, ce qui vaut la peine de créer un lien vers remoteInspector caché dans iOS5 - de loin le meilleur moyen de déboguer votre UIWebViews - il suffit de compiler de manière conditionnelle avant de l'envoyer à Apple.

31
Dan Bennett

alert () fonctionne certainement pour moi.

Cependant, vous pouvez également faire beaucoup d'autres choses, comme créer votre propre alerte DHTML qui apparaît dans une couche. Cela peut être agréable, car vous pouvez envoyer plusieurs alertes à un seul div, sans arrêter votre application. Vous devriez également pouvoir y écrire une trace de pile (la trace de pile se trouve dans l'objet exception et vous pouvez toujours lancer vos propres exceptions).

Sinon, si vous utilisez le simulateur, votre "alert ()" personnalisé peut appeler Objective C et afficher la chaîne dans la fenêtre de la console du simulateur iPhone:

document.location.href = "http://debugger/" + 
   encodeURIComponent(outputString);   

et du côté de l'objectif C:

//--------------------------------------------------------------------
- (BOOL)webView:(UIWebView*)webView 
       shouldStartLoadWithRequest: (NSURLRequest*)req 
       navigationType:(UIWebViewNavigationType)navigationType {
    if ([[[req URL] Host] isEqualToString:@"debugger"]){
        // do stuff with [[req URL] path] 
       }
}

Cela dit, j'ai une application qui repose beaucoup sur le contenu UiWebView/javascript, et j'ai tendance à faire la plupart des dev javascript dans Chrome (simulant ce qui est nécessaire à partir de l'environnement iPhone)

9
rob

Je n'ai pas encore essayé, mais jetez un coup d'œil à ceci Weinre

Semble très prometteur.

6

C'est une vieille question. Mais j'aimerai quand même partager mes deux sous.

J'utilise jsconsole.com pour le débogage à distance. C'est facile. Incluez simplement une balise de script et utilisez les journaux de la console pour déboguer en imprimant. Cela peut également être utilisé pour le débogage sur un périphérique réel.

4
Kazekage Gaara

Je suis le moyen génial de déboguer UIWebView ou SFSafariViewController .

J'espère que cela aidera.

Étape 1: Ouvrez Safari VC Sur votre Mac (hahaha. Ne faites pas votre visage, si je dis dedans votre Macbook, suivez mes étapes)

Étape 2: Accédez aux préférences Safari et cliquez sur Avancé. Vous obtiendrez ce paramètre sur votre écran MacBook.

enter image description here

Activez maintenant le menu Afficher pour développer dans la barre de menus. Maintenant, tout votre travail est terminé. Pensez-vous que je plaisante: P: P no man ...

Étape 3: Exécutez votre application dans Device ou Simulator. (Ne pensez pas que vous courez) Et allez dans votre application où vous ouvrez votre Webview ou SFSafariViewController. Jusqu'à présent, vous n'avez pas compris ce que je sais. Sois cool et vois ma prochaine étape.

Étape 4: Ouvrez Safari sur votre MacBook et cliquez sur Options de développement dans la barre de menus. Avez-vous obtenu quelque chose que votre MacBook, iPad/iPhone affiche correctement ?????

enter image description here

Étape 5: C'est fait. Cliquez sur votre appareil et cliquez sur l'URL. Une nouvelle fenêtre apparaîtra comme ceci. enter image description here

Step6: qu'est-ce que vous cherchez maintenant c'est ici toutes les étapes.

Maintenant, déboguez votre page Web sur cette console. Soyez heureux et profitez de votre journée en codant avec une tasse de thé ou de café.

IMP: N'oubliez pas d'activer Voir l'image ci-dessous enter image description here

3
Anup Gupta

Vieille question, mais je pense avoir trouvé la meilleure solution. Dans mon cas, vous devez déboguer uiwebview, mais je n’ai pas accès à l’application IOS et uniquement au contenu html. Quelques journaux JS, j’ai ajouté le code suivant pour charger le feu firebug JS et l’afficher automatiquement:

en l'appelant de JS

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://getfirebug.com/firebug-lite-debug.js';
document.head.appendChild(script);

ou chargez-le à partir de HTML

<script type="text/javascript" src="https://getfirebug.com/firebug-lite-debug.js"></script>
3
talsibony