Démarrer les navigateurs mobiles avec WebKit débogage à distance sur
À Google I / O 2011: Chrome Dev Tools Reloaded , Paul Irish et Pavel Feldman ont introduit une nouvelle fonctionnalité de débogage à distance - qui était en passantincluse dans webkit .
--
C'est une excellente nouvelle, en particulier pour les développeurs Web mobiles.
Mais comment l'activer, par exemple en lançant iOS simulator, ou simplement en exécutant Safari Mobile sur un iPhone? (pour chrome, cela se fait traditionnellement avec l'option --remote-debugging-port=9222
lors du lancement).
Je essayé d'activer le mode développeur dans les paramètres safari (Settings
> Safari
> Developer
> Debug Console: ON
) mais sans succès...
Je ne connais pas android ici, mais est-ce que quelqu'un sait quand Apple (Safari Mobile) ou Google (le navigateur d'android) inclura cette nouvelle fonctionnalité afin que nous puissions profiter du débogage à distance dans le développement mobile?
Merci.
Réf.: http://paulirish.com/2011/a-re-introduction-to-the-chrome-developer-tools/#comment-63113
8 réponses
Safari sur iOS 6 Dans iOS6, vous pouvez maintenant déboguer à distance à partir de Safari 6 (uniquement OS X). Sur L'appareil, ouvrez Paramètres > Safari > Avancé > activer L'inspecteur Web. Ouvrez Préférences Safari, Avancé, cochez "Afficher le menu développer dans la barre de menus". Connectez votre iPhone / iPad avec un câble USB. Maintenant, sous la barre de menu développer, vous devriez obtenir un sous-menu pour votre appareil avec les onglets que vous avez ouverts dans Safari sur votre appareil.
Safari sur iOS 7 En plus des exigences ci dessus vous aurez besoin de Safari 6.1, qui pour le moment (Oct. 8th 2013) est uniquement disponible en tant que graine pour les développeurs: https://developer.apple.com/downloads/index.action?name=Safari%206.1
Google Chrome sur Android 4 C'est un peu plus compliqué sur Android. Instructions pour le débogage à distance sur Chrome pour Android ici: https://developers.google.com/chrome/mobile/docs/debugging Je n'ai pas trouvé un moyen d'activer le débogage à distance dans le navigateur par défaut Android (v4. 04).
Jetez un oeil à ce script bash pour démarrer l'inspecteur distant avec iOS simulator: https://gist.github.com/2241976
Actuellement, aucun navigateur mobile n'implémente le protocole de débogage à distance webkit. (Peut-être que vous pouvez obtenir des builds personnalisés pour android qui le supportent)
Cependant, il y a weinre, qui vous donne une version distante de l'inspecteur web. Mais vous devez inclure du code dans votre page pour les soutenir. (Parce que ce n'est pas une fonctionnalité de navigateur).
Juste parce qu'une fonctionnalité est implémentée dans un port de WebKit (dans ce cas, Apple et Chromium), ne signifie pas qu'elle est toujours disponible ailleurs. J'ai écrit ceci en détail dans mon blog sur différentes implémentations de ports WebKit .
Jusqu'à présent, le seul port WebKit mobile qui a la fonction de débogage à distance est rim PlayBook browser.
Pour iOS, il est très difficile de savoir car Apple ne donne aucune information sur son futur produit jamais. Au moins, nous savons que iOS 5 ne l'aura pas puisque les versions bêta ne montrent rien de lié.
Pour Android, certainement il arrive dans une prochaine version, puisque les gens Android sont adoptant Chrome comme nouvelle base pour son WebKit.
Nathan De Vries a compris comment faire cela sur iOS5 en cours d'exécution dans le simulateur. Il tourne autour de l'appel de la méthode privée _enableRemoteInspector
.
Lisez-le. Résumé suit:
Pour l'activer Pour Mobile Safari, attachez-le avec gdb et appelez la méthode:
MobileSafari_PID=$(ps x | grep "MobileSafari" | grep -v grep | awk '{ print $1 }')
if [ "$MobileSafari_PID" == "" ]; then
echo "Mobile Safari.app must be running in the Simulator to enable the remote inspector."
else
cat <<EOM | gdb -quiet > /dev/null
attach $MobileSafari_PID
p (void *)[WebView _enableRemoteInspector]
detach
EOM
Fi
Puis accédez à l'inspecteur à http://localhost:9999/
.
Avec un UIWebView
intégré, activez-le comme ceci:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// ...Snipped...
[NSClassFromString(@"WebView") _enableRemoteInspector];
// ...Snipped...
}
Sur un appareil réel, cela ne fonctionne pas, probablement parce que le port est pare-feu-si vous avoir un appareil jailbreaké vous pouvez contourner cela (mettez-nous à jour si vous le faites).
Thomas souligne une excellente ressource pour le débogage à distance, mais il déclare que vous devez ajouter le code à la page Web. Ce n'est pas strictement vrai, car weinre permet également l'interaction à travers les bookmarklets. Une partie de la page ici (sous la section commodément appelée "utilisation d'un bookmarklet"), il dit que cela devrait fonctionner pour Android 2.2+ et iOS.
Quelques choses pertinentes à noter:
- Il ne vous permettra pas de déboguer les erreurs de démarrage (la page doit déjà être chargée pour ouvrir le bookmarklet).
- Il ne semble pas se reconnecter si vous perdez la connexion (vous devez actualiser la page pour récupérer la connexion).
- Si votre js est déjà cassé, il le sera déjà aussi.
Il est également possible (je l'ai fait moi-même) de "déboguer" le code du navigateur android en utilisant un webview. Vous pouvez avoir le WebView attraper tous les appels de méthode (ie. console.journal). En utilisant cela, vous pouvez attraper et enregistrer, ou transférer les messages à logcat.
Connexes à la méthode que vous avez déjà essayé-lorsque vous avez activé la console de débogage sur iOS, où cherchiez-vous une sortie d'interaction/journalisation? Plus particulièrement, avez-vous vérifié dans la console de débogage dans Xcode/iPhone simulator?
L'utilitaire Shadow D'Adobe (qui vient d'être publié) vous permet de déboguer à distance en utilisant weinre sans avoir besoin d'injecter de code dans vos pages web. Il fonctionne avec Chrome sur Windows et Mac en tant que navigateur "maître" et synchronisera chaque navigation de page sur n'importe quel nombre d'appareils exécutant le client iOS ou Android.
Notez que weinre lui-même est quelque peu limité. Par exemple, vous n'aurez pas accès à l'onglet Réseau.