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

STe*_*TeN 27 javascript android web-applications mobile-website android-logcat

我正在开发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个月后编辑

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

不要错过这里的演示 希望这有帮助!斯登

thr*_*flo 30

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

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

在顶部,您会看到标有"JavaScript控制台"的栏.


Jon*_*han 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;
    }
});
Run Code Online (Sandbox Code Playgroud)

有关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
Run Code Online (Sandbox Code Playgroud)

tag-name与Log.x日志级别中指定的字符串匹配,与调用Log.x时指示的日志级别相匹配<---

与上述代码有关的示例:

adb logcat Your-Application-Name:D *:S
Run Code Online (Sandbox Code Playgroud)

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

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

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


sta*_*p75 8

我有同样的问题,我通过执行以下操作解决它:

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

appView.addJavascriptInterface(new JSBridge(), "JSBridge");
Run Code Online (Sandbox Code Playgroud)

2 /使用日志功能创建JSBridge类

class JSBridge {
  public void log(String msg){
   Log.d(msg);
  }
}
Run Code Online (Sandbox Code Playgroud)

3 /在您的javascript中,您现在可以拨打电话

JSBridge.log("my log message");
Run Code Online (Sandbox Code Playgroud)

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