J'essaie de comprendre pourquoi quelque chose avec Javascript ne fonctionne pas à l'intérieur d'un UIWebView. À ma connaissance, il n'y a 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 juste revenir à 2004 et utiliser des statemen d'alerte - oh attendez qu'ils ne semblent pas non plus fonctionner à l'intérieur d'un UIWebView!
La seule chose à laquelle je pourrais penser est en exportant mes fichiers HTML et JS sur mon bureau, puis en effectuant simplement mon débogage à l'intérieur de Safari. Et ça marche! Mais bien sûr, le bogue avec lequel je me bats dans UIWebView ne se produit pas dans Safari.
Existe-t-il d'autres moyens de débogage à l'intérieur d'une UIWebView, ou des astuces que je peux utiliser comme la méthode d'alerte à l'ancienne?
la source
Settings
>Safari
>Advanced
>Web Inspector
<- activer cetteCette requête est en tête de Google, il vaut donc la peine de créer un lien vers le remoteInspector caché dans iOS5 - de loin le meilleur moyen trouvé à ce jour pour déboguer votre UIWebViews - il suffit de compiler conditionnellement avant de l'envoyer à Apple.
la source
[NSClassFromString(@"WebView") performSelector:@selector(_enableRemoteInspector)];
n'oubliez pas de supprimer l'appel lorsque vous construisez pour la publication!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 intéressant 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 est dans l'objet d'exception et vous pouvez toujours lever vos propres exceptions).
Sinon, si vous exécutez sur le simulateur, votre "alert ()" personnalisé pourrait appeler l'objectif C et afficher la chaîne dans la fenêtre de la console du simulateur iPhone:
et côté objectif C:
Cela dit, j'ai une application qui utilise beaucoup de contenu UiWebView / javascript, et j'ai tendance à faire la plupart des développeurs javascript dans Chrome (simulant ce qui est nécessaire à partir de l'environnement iPhone)
la source
J'espère que cela aidera.
Étape 1: Ouvrez Safari VC sur votre Mac (hahaha ne faites pas votre visage, si je dis dans votre Macbook, suivez simplement mes étapes)
Étape 2: Allez dans les préférences de Safari et cliquez sur Avancer. Vous obtiendrez ce paramètre sur l'écran de votre MacBook.
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 simplement exécutez) Et allez dans votre application où vous ouvrez votre Webview ou SFSafariViewController. Jusqu'à présent, vous n'avez pas compris je sais. Soyez cool et voyez ma prochaine étape.
Étape 4: Ouvrez Safari dans votre MacBook et cliquez sur l'option de développement dans la barre de menus. Avez-vous obtenu quelque chose que votre MacBook, iPad / iPhone affiche correctement ?????
Étape 5: c'est fait. cliquez sur votre appareil et cliquez sur URL Une nouvelle fenêtre apparaîtra comme ceci.
Étape 6: que cherchez-vous maintenant, c'est ici toutes les étapes.
IMP: N'oubliez pas d'activer Voir l'image ci-dessous
la source
Je n'ai pas encore essayé, mais jetez un œil à ce Weinre
Ça a l'air très prometteur.
la source
C'est une vieille question. Mais j'aimerai toujours partager mes deux cents.
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 appareil réel.
la source
Ancienne question, mais je pense avoir trouvé la meilleure solution, dans mon cas, vous devez déboguer uiwebview, mais je n'avais pas accès à l'application IOS et uniquement au contenu html et j'ai dû afficher quelques journaux JS, j'ai ajouté le code suivant pour charger le light firebug JS et l'afficher automatiquement:
l'appelant de JS
ou chargez-le depuis html
la source
Vous pouvez configurer un système comme celui utilisé dans PhoneGap pour envoyer des messages de JavaScript à Objective-C et vous connecter à partir de là. En un mot, ils définissent document.location avec un schéma personnalisé et bloquent ce schéma dans le rappel du délégué.
Vous pouvez profiter du fait qu'une UIWebView est la plupart des délégués pour une WebView. WebKit est techniquement non documenté pour iPhone, mais il est généralement identique à celui spécifié dans les en-têtes WebKit du bureau, y compris éventuellement WebScriptObject. J'utilise ceci pour le débogage, mais assurez-vous de supprimer ce code avant de le soumettre à Apple.
Pour obtenir une WebView à partir d'une UIWebView, implémentez une méthode déléguée comme
-(void) webView:(id)inWebView didFinishLoadForFrame:(id)inWebFrame
dans une sous-classe de UIWebView. Appelez super si vous utilisez celui-là.la source