HTC Android设备上的Javascript console.log()和adb logcat

时间:2011-04-04 12:34:28

标签: javascript android web-applications mobile-website android-logcat

我正在用HTML开发应用程序,它从Javascript调用console.log(),在开发期间为我提供有关网页代码中发生的事情的日志。

不幸的是,当我使用adb logcat命令检查日志时,我可以看到来自所有其他应用程序的输出,但不能看到我的JavaScript代码的输出。我甚至可以从Web浏览器看到加载页面的日志,但不能从我在Web浏览器中执行的JavaScript代码输出console.log()

根据有关this pagehttp://developer.android.com/guide/webapps/debugging.html)的信息,它应该有效。

我正在测试 HTC WildFire HTC Desire HD


超过6个月后编辑

经过一段时间和使用不同设备(手机,电视,机顶盒,WebViews,UIWebViews ......)的经验,我的建议是从JavaScript执行远程日志记录而不依赖于< strong> console.log()或其他方法 - 请参阅图片加载here的好技巧。

不要错过演示文稿here 希望这可以帮助! 斯登

6 个答案:

答案 0 :(得分:29)

在Android 2.3.3的默认浏览器中(可能从那时开始),你可以简单地使用内置的javascript控制台:

  • 打开浏览器
  • 转到您的网页
  • 在地址栏中输入about:debug,然后按Enter
  • 如果您进入浏览器应用的设置
  • ,您会看到有关调试选项的部分
  • 勾选“显示JavaScript控制台”(如果尚未启用)
  • 刷新您的网页

在顶部,您会看到标有“JavaScript控制台”的栏。

答案 1 :(得分:12)

我一直在使用三种不同的HTC手机,几乎完全没有这个问题。以下是一些要检查的事项:

  1. 确保已启用USB调试。
  2. 确保您的Webview具有WebChromeClient集。 Webview中使用的浏览器不实现console.log()。
  3. 应该很容易看到adb logcat的输出,但为了更容易,请过滤输出。
  4. 打开USB调试:

    1. 断开设备与计算机的连接。
    2. 转到设置 - &gt;应用程序 - &gt;发展 - &gt;选择“启用USB调试”
    3. 插件到电脑。 (确保安装了正确的驱动程序以使用ADB - 更多信息请参见:http://developer.android.com/guide/developing/device.html
    4. 设置覆盖onConsoleMessage()的WebChromeClient:

      //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;
          }
      });
      

      关于onConsoleMessage()的更多信息: http://developer.android.com/reference/android/webkit/WebChromeClient.html#onConsoleMessage(java.lang.String,int,java.lang.String)

      有关调试的更多信息,请访问:http://developer.android.com/guide/webapps/debugging.html

      过滤adb logcat的输出:

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

      tag-name与Log.x中指定的字符串匹配 log-level与调用Log.x&lt; ---

      时指示的日志级别相匹配

      与上述代码相关的示例:

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

      这将显示匹配标记的所有d级日志,Your-Application-Name,并使其他所有内容静音。

      有关adb过滤的更多信息: http://developer.android.com/guide/developing/tools/adb.html#logcat

      希望它有所帮助!我知道这是对其他答案的总结,但事实是,它需要所有步骤才能使其发挥作用。 :)

答案 2 :(得分:8)

我遇到了同样的问题,我通过以下方式解决了这个问题:

1 /初始化webview时,添加一个javascript桥类:

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

2 /创建具有日志功能的JSBridge类

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

3 /在您的javascript中,您现在可以致电

JSBridge.log("my log message");

你的问题可能有点矫枉过正,但你也可以用这个解决方案做更多的事情

答案 3 :(得分:4)

Logcat会在您的设备上生成大量内容,因此您可能需要对此进行过滤。

如果您标记了日志输出,则可以尝试“grep”它。 例如:根据您的文章,输出应如下所示:

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

如果您使用该命令(假设您使用的是Linux,Mac OS或其他任何带有grep命令的内容)

adb logcat | grep -i "console"

它会将输出减少到这些引号内指定的关键字。如果您在输出中添加唯一标记,则还可以对此进行过滤,以便只获得想要查看的内容。

[ctrl]+c

将停止此logcat进程。

答案 4 :(得分:3)

请参阅:How to display console.log() output in PhoneGap app using Eclipse and HTC Desire HD?

  

似乎已禁用console.log   在运行Android 2.2的HTC设备上。

您可以使用remote debugging中的jsconsole.com来解决问题。

答案 5 :(得分:0)

尝试以下方法:

1)打开设备选项卡,确保已选择/突出显示已连接的设备。

2)确保您的设备已启用USB调试。以下是您需要做的事情:

  

2a)在主屏幕中,按MENU,然后点击设置&gt;应用程序&gt;发展。

     

2b)确保选中USB调试复选框。