140 votes

Quelles sont certaines méthodes de débogage Javascript à l'intérieur d'une UIWebView?

Je suis à essayer de comprendre pourquoi quelque chose avec le Javascript ne fonctionne pas à l'intérieur d'une 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. No problemo, je vais juste revenir à 2004 et de l'utilisation d'alerte confession-- oh, attendez, ils ne semblent pas fonctionner à l'intérieur d'une UIWebView!!!!

La seule chose que je pouvais penser, c'est par l'exportation de mon code HTML Et JS fichiers de mon bureau, puis je ne fais que mon débogage à l'intérieur de Safari. Et que des travaux! Mais bien sûr, le bug je suis avec des combats dans la UIWebView ne se produit pas dans Safari.

Existe-il d'autres moyens pour le débogage à l'intérieur d'une UIWebView, ou des trucs que je peux utiliser apparente à l'aide de la vieille école de l'alerte?

286voto

refaelos Points 2263

Si vous utilisez iOS >= 6 et vous avez mountain lion (10.8) ou Safari >= 6, il vous suffit:

  1. Ouvrez l'application dans le simulateur (ou de votre appareil dans XCode >= 4.5.x).
  2. Ouvrez Safari (aller à Preferences -> Advanced et vérifiez que l'option "Afficher le Menu développement dans la barre de menu" est sur les.
  3. À partir de la barre de Menu (Safari) sélectionnez Develop -> iPhone Simulator -> [your webview page].

Ça y est !

31voto

Dan Bennett Points 875

Cette requête tops de google, de sorte que la peine de liaison à la remoteInspector caché dans iOS5 - de loin la meilleure solution trouvée jusqu'à présent pour déboguer votre UIWebViews - juste conditionnelle de compiler avant de l'envoyer à Apple.

9voto

rob Points 3743

alert() fonctionne pour moi.

Cependant, vous pouvez également faire beaucoup d'autres choses, comme faire votre propre DHTML alerte qui s'affiche dans une couche. Cela peut être agréable car vous pouvez faire plusieurs alertes à un seul div, sans s'arrêter de votre application. Vous devez également être en mesure d'écrire une trace de la pile (la trace de la pile est dans l'objet de l'exception, et vous pouvez toujours jeter votre propre exceptions).

Alternativement, si en cours d'exécution sur le simulateur personnalisé "alert()" pourrait remettre en objective C, et d'afficher la chaîne de caractères dans le simulateur d'iPhone de la fenêtre de la console:

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

et sur l'objective-C côté:

//--------------------------------------------------------------------
- (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 est lourd sur le UiWebView / javascript trucs, et j'ai tendance à faire plus javascript dev de Chrome (simulation de ce qui est nécessaire à partir de l'iPhone de l'environnement)

6voto

Je n'ai pas essayé encore, mais jetez un oeil à ce Weinre

Semble très prometteur.

-1voto

drawnonward Points 35444

Vous pouvez mettre en place un système comme celui utilisé dans PhoneGap pour envoyer des messages à partir de JavaScript pour Objective-C et du journal à partir de là. En un mot, ils s'document.emplacement avec un modèle personnalisé et le blocage de ce régime dans le délégué de rappel.

Vous pouvez tirer avantage du fait qu'une UIWebView est la plupart des délégués pour une WebView. WebKit est techniquement sans-papiers pour l'iPhone, mais pour la plupart les mêmes que ceux indiqués dans le bureau WebKit-têtes, y compris éventuellement la WebScriptObject. - Je l'utiliser pour le débogage, mais assurez-vous de la bande ce code avant de le soumettre à Apple.

Pour obtenir une WebView à partir d'une UIWebView, de mettre en œuvre une méthode du délégué comme -(void) webView:(id)inWebView didFinishLoadForFrame:(id)inWebFrame dans une sous-classe de UIWebView. Appel super si vous l'utilisiez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X