25

Estoy desarrollando la aplicación en HTML llamando al console.log() desde Javascript para proporcionarme registros durante el desarrollo de lo que sucede en el código de la página web.Javascript console.log() en dispositivos HTC Android y adb logcat

Desafortunadamente, cuando uso el comando adb logcat para verificar los registros, puedo ver el resultado de todas las demás aplicaciones, pero no el resultado de mi código JavaScript. Puedo ver incluso el registro del navegador web que la página está cargada, pero no el resultado console.log() de mi código JavaScript ejecutado en el navegador web.

Según la información en this page (http://developer.android.com/guide/webapps/debugging.html) debería funcionar.

estoy probando el HTC Wildfire y HTC Desire HD.


editar después de más de 6 meses

Después de algún tiempo y experiencia con diferentes dispositivos (teléfonos, televisores, decodificadores, WebViews, UIWebViews ...) mi consejo es hacer la registro remoto de JavaScript y no confiar en el console.log() u otros métodos - vea el truco agradable con la carga de la imagen here.

No te pierdas la presentación here Espero que esto ayude! Sten

+0

por favor brinde su código. ¿Intentó uno en la página que publicó arriba? – Thorben

+0

Hola, llamo desde JavaScript solo al método console.log() en muchos lugares, por ejemplo ** console.log ("[Ir a detalles]"); **, nada más. Por cierto. Estoy usando el framework Sencha Touch, pero no debería afectar nada ... – STeN

+0

Estoy usando un HTC Droid Incredible y tampoco puedo hacer que console.log funcione correctamente. Cuando uso el emulador console.log funciona correctamente y enruta todo al logcat, pero no cuando lo intento directamente en mi dispositivo. – TheRightChoyce

Respuesta

29

En el navegador por defecto en Android 2.3.3 (y, presumiblemente, a partir de entonces) sólo tiene que utilizar el construido en la consola javascript:

  • abrir el navegador
  • ir a su página web
  • tipo about:debug en la barra de direcciones y pulsa enter
  • verá una sección para las opciones de depuración aparecen si usted entra en configuración de la aplicación del navegador
  • tick "Mostrar JavaScript Console" si no está ya Habilitado
  • refrescar la página web

En la parte superior, verá una barra denominada "Consola JavaScript".

+0

Esto es genial. Lamentablemente, no parece estar en CUALQUIERA de los dispositivos Android que tengo: Motorola Xoom WiFi con Android 3.2 Samsung Galaxy S (SGH-I897) con Android 2.2 Samsung Galaxy S (SGH-I897) con Android 2.1 Samsung Galaxy Tab (El primero) con Android 2.1 Javascript está habilitado. Parece que no puedo encontrar ninguna documentación "oficial" al respecto. ¿Sabes dónde podría encontrar algunos? Me pregunto por qué me estoy perdiendo! Gracias. – Jonathan

+1

Gracias thruflo!Esto funcionó para mí en un Nexus S con Android 2.3.6. Me gusta esta solución porque puedo seguir usando el método simple console.log() (me gusta simple ;-), y no es necesario agregar un marco de registro JS. NOTA: Después de escribir sobre about: debug, me tomó un minuto darme cuenta de que Javascript Console estaba disponible. Se muestra como una barra delgada en la parte superior de la ventana. Tocarlo lo expande. – devdanke

+0

** + 1 ** Nunca supe sobre 'about: debug' – iConnor

0

intente lo siguiente:

1) abrir la ficha de dispositivos y asegúrese de que el dispositivo se haya conectado está seleccionado/resaltado.

2) Asegúrese de que la depuración de USB esté habilitada en su dispositivo. Esto es lo que debe hacer para esto:

2a) Desde la pantalla de inicio, presione MENÚ, y luego pulse Configuración> Aplicaciones> Desarrollo.

2b) Asegúrese de que la casilla de verificación de depuración de USB esté seleccionada.

+0

Borre también el registro antes de ejecutar su aplicación. A veces, el búfer logCat se llena y borra inmediatamente cualquier registro en el instante en que aparece. (Aparecen como un flash) –

4

Logcat genera muchas cosas en dispositivos además del tuyo, por lo que es posible que tengas que filtrar esto.

Puede intentar "grep" su resultado de registro si lo ha etiquetado. Por ejemplo: según su artículo la salida debe ser similar:

Console: Hello World http://www.example.com/hello.html :82 

Si se utiliza el comando (asumiendo que usted está utilizando un Linux, Mac OS o cualquier otra cosa con un comando grep)

adb logcat | grep -i "console" 

reducirá el resultado a la palabra clave especificada dentro de estas comillas. Si agrega una etiqueta única a su salida, también puede filtrar esto para que solo obtenga lo que desea ver.

[ctrl]+c 

detendrá este proceso de logcat.

8

he tenido el mismo problema, resolverlo de la siguiente manera:

1/cuando usted hace funcionar su vista web, añadir una clase JavaScript puente:

appView.addJavascriptInterface(new JSBridge(), "JSBridge"); 

2/crear la clase JSBridge con una función de registro

class JSBridge { 
    public void log(String msg){ 
    Log.d(msg); 
    } 
} 

3/Javascript en su momento se le puede llamar

JSBridge.log("my log message"); 

podría ser un poco exagerado para su problema, pero también se puede hacer mucho más con esa solución

+0

dónde inicializar su página web, agregar una clase puente de JavaScript? –

12

He estado usando tres diferentes teléfonos de HTC, casi exclusivamente, y nunca he tenido este problema. Aquí hay algunas cosas para comprobar:

  1. Asegúrese de que la depuración de USB esté habilitada.
  2. Asegúrate de que tu vista web tenga un conjunto de WebChromeClient. El navegador utilizado en Webview no implementa console.log().
  3. Debería ser fácil ver la salida de adb logcat, pero para hacerlo más fácil, filtre la salida.

activar la depuración USB:

  1. Desconecte el dispositivo del ordenador.
  2. Vaya a Configuración -> Aplicaciones -> Desarrollo -> Seleccione "Habilitar depuración de USB"
  3. Plugin a la computadora. (Asegúrate de que tienes instalados los controladores correctos para usar ADB - más información aquí: http://developer.android.com/guide/developing/device.html)

Establecer un WebChromeClient que anula onConsoleMessage():

//Set the output prefix so you can filter adb logcat results later 
public static final String TAG = "Your-Application-Name"; 

myWebView = (WebView) findViewById(R.id.webview); 

//Not going to have much luck running JS without this: 
myWebView.getSettings().setJavaScriptEnabled(true); 

//Override onConsoleMessage() to output to the Log. 
myWebView.setWebChromeClient(new WebChromeClient() { 
    @Override 
    public boolean onConsoleMessage(ConsoleMessage cm) { 
     Log.d(TAG, cm.message() + " -- From line " 
     + cm.lineNumber() + " of " 
     + cm.sourceId()); 
     return true; 
    } 
}); 

Más información sobre onConsoleMessage() aquí : http://developer.android.com/reference/android/webkit/WebChromeClient.html#onConsoleMessage(java.lang.String, int, java.lang.String)

Más información sobre la depuración en general aquí: http://developer.android.com/guide/webapps/debugging.html

filtrar la salida de Logcat ADB:

adb logcat tag-name:log-level *:S 

etiqueta de nombre coincide con la cadena especificada en Log.x registro de nivel coincide con el nivel de registro que se indica cuando se llama registro.x < ---

ejemplo en relación con el código de seguridad:

adb logcat Your-Application-Name:D *:S 

Esto mostrará todos los registros de nivel D para la etiqueta correspondiente, su-nombre-aplicación, y silenciar a todo lo demás.

Más información sobre el filtrado ADB aquí: http://developer.android.com/guide/developing/tools/adb.html#logcat

espero que ayude! Sé que fue un poco resumir las otras respuestas, pero el hecho es que se necesitan todos los pasos para que funcione. :)

+0

Tengo un HTC Desire 2.3.3 comiendo la salida 'console.log'. utilizando 'onConsoleMessage' incluso no puede obtener el registro de js. – Xiao

Cuestiones relacionadas