28

我正在用 HTML 开发应用程序,该应用程序console.log()从 Javascript 调用,以便在开发过程中为我提供有关网页代码中发生的情况的日志。

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

根据此页面上的信息(http://developer.android.com/guide/webapps/debugging.html)它应该可以工作。

我正在HTC WildFireHTC Desire HD上进行测试。


超过 6 个月后编辑

经过一段时间和使用不同设备(电话、电视、机顶盒、WebView、UIWebView...)的经验后,我的建议是从 JavaScript 进行远程日志记录,而不是依赖于console.log()或其他方法 - 请参阅在这里加载图像的好技巧。

不要错过这里的演示 希望这会有所帮助!不锈钢

4

6 回答 6

31

在 Android 2.3.3 上的默认浏览器中(大概从那时起),您可以简单地使用内置的 javascript 控制台:

  • 打开浏览器
  • 转到您的网页
  • 在地址栏中输入about:debug并回车
  • 如果您进入浏览器应用程序的设置,您会看到一个调试选项部分
  • 如果尚未启用,请勾选“显示 JavaScript 控制台”
  • 刷新您的网页

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

于 2011-07-17T18:14:36.083 回答
12

我一直在使用三款不同的 HTC 手机,几乎完全是,从来没有遇到过这个问题。这里有几件事要检查:

  1. 确保启用了 USB 调试。
  2. 确保您的 Webview 设置了 WebChromeClient。Webview 中使用的浏览器没有实现console.log()。
  3. 应该很容易看到 adb logcat 的输出,但为了更容易,过滤输出。

开启USB调试:

  1. 断开设备与计算机的连接。
  2. 转到设置 -> 应用程序 -> 开发 -> 选择“启用 USB 调试”
  3. 电脑插件。(确保您安装了正确的驱动程序以使用 ADB - 更多信息在这里:http: //developer.android.com/guide/developing/device.html

设置一个覆盖 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 时指定的日志级别 <---

与上述代码相关的示例:

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

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

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

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

于 2011-05-16T22:00:40.910 回答
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");

对于您的问题可能有点矫枉过正,但您也可以使用该解决方案做更多事情

于 2011-05-12T15:47:14.393 回答
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 进程。

于 2011-05-04T23:09:06.900 回答
3

请参阅:如何使用 Eclipse 和 HTC Desire HD 在 PhoneGap 应用程序中显示 console.log() 输出?

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

您可以通过在jsconsole.com中使用远程调试来解决它。

于 2011-05-06T10:44:46.097 回答
0

尝试以下操作:

1) 打开设备选项卡并确保您连接的设备被选中/突出显示。

2) 确保您的设备上启用了 USB 调试。这是您需要做的:

2a) 在主屏幕中,按 MENU,然后点击设置 > 应用程序 > 开发。

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

于 2011-05-04T19:00:05.973 回答