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

HTC Android设备和adb logcat上的Javascript console.log(),javascript,android,web-applications,mobile-website,android-logcat,Javascript,Android,Web Applications,Mobile Website,Android Logcat,我正在用HTML开发这个应用程序,它从Javascript调用console.log(),在开发过程中为我提供关于网页代码中发生了什么的日志 不幸的是,当我使用adb logcat命令检查日志时,我可以看到所有其他应用程序的输出,但不能看到JavaScript代码的输出。我甚至可以从web浏览器中看到加载页面的日志,但不能从web浏览器中执行的JavaScript代码中看到console.log()输出 根据()上的信息,它应该可以工作 我正在测试HTC WildFire和HTC Desire

我正在用HTML开发这个应用程序,它从Javascript调用
console.log()
,在开发过程中为我提供关于网页代码中发生了什么的日志

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

根据()上的信息,它应该可以工作

我正在测试HTC WildFire和HTC Desire HD


超过6个月后编辑

在使用不同的设备(电话、电视、机顶盒、网络视图、UIWebView…)一段时间后,我的建议是从JavaScript执行远程日志记录,而不是依赖控制台.log()或其他方法-查看图像加载的好技巧

不要错过这次演讲 希望这有帮助! 请尝试以下方法:

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

2) 确保设备上已启用USB调试。以下是您需要为此执行的操作:

2a)在主屏幕上,按MENU,然后点击Settings>Applications>Development

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


除了你的设备,Logcat还会在设备上生成很多东西,所以你可能需要过滤这些东西

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

Console: Hello World http://www.example.com/hello.html :82
如果您使用该命令(假设您使用的是Linux、Mac OS或任何其他grep命令)

它会将输出减少到这些引号内指定的关键字。如果您向输出中添加了一个唯一的标记,您还可以对其进行过滤,这样您就可以只看到您想看到的内容

[ctrl]+c
将停止此logcat进程。

请参阅:

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


您可以使用in来绕过它。

我也遇到了同样的问题,我通过执行以下操作来解决它:

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");

对你的问题来说可能有点过分了,但你也可以用这个解决方案做更多的事情

我一直在使用三款不同的HTC手机,几乎都是独家使用的,从来没有出现过这个问题。以下是一些需要检查的事项:

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

    //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;
        }
    });
    
    adb logcat tag-name:log-level *:S
    
  • 断开设备与计算机的连接
  • 转到设置->应用程序->开发->选择“启用USB调试”
  • 计算机插件。(请确保安装了正确的驱动程序以使用ADB-更多信息请参见此处:)
  • 设置覆盖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;
        }
    });
    
    adb logcat tag-name:log-level *:S
    
    有关OnConsolleMessage()的详细信息,请参见:,int,java.lang.String)

    有关调试的详细信息,请参见此处:

    过滤adb logcat的输出:

    //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;
        }
    });
    
    adb logcat tag-name:log-level *:S
    
    标记名与Log.x中指定的字符串匹配
    日志级别与您在Android 2.3.3上的默认浏览器中调用log.x时指定的日志级别相匹配(从那时起可能是这样),您只需使用内置javascript控制台即可:

    • 打开浏览器
    • 转到您的网页
    • 在地址栏中键入
      about:debug
      ,然后按enter键
    • 如果进入浏览器应用程序的设置,将显示调试选项部分
    • 如果尚未启用,请勾选“显示JavaScript控制台”
    • 刷新网页

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

    请提供您的代码。您是否尝试了上面发布的页面上的方法?您好,我在许多地方仅从JavaScript调用了console.log()方法,例如console.log(“[Go to details]”);,没别的了。顺便说一句,我使用的是Sencha Touch框架,但不应该影响任何东西……我使用的是HTC Droid,而且无法让console.log正常工作。当我使用emulator console.log时,它会正常工作并将所有内容路由到logcat,但当我直接在设备上尝试时,它不会。我遇到了HTC Evo-console.log(以及console.error、console.warn和console.info)在logcat中不显示的类似问题。同样的程序在emulator、Nexus One和Motorola DroidSimular上显示得很好。在运行应用程序之前,还需要清除日志。有时,logCat缓冲区已满,它会在日志出现时立即清除所有日志。(它们看起来像一道闪光)这很酷。不幸的是,它似乎不在我拥有的任何安卓设备上:摩托罗拉Xoom WiFi运行安卓3.2三星Galaxy S(SGH-I897)运行安卓2.2三星Galaxy S(SGH-I897)运行安卓2.1三星Galaxy Tab(第一个)运行安卓2.1 Javascript已启用。我似乎找不到任何关于这个的“官方”文件。你知道我在哪里能找到一些吗?我想知道为什么我错过了!谢谢,谢谢你,thruflo!这在运行安卓2.3.6的Nexus S上对我很有效。我喜欢这个解决方案,因为我可以继续使用simple console.log()方法(我喜欢simple;-),而不需要添加JS日志框架。注意:在输入about:debug之后,我花了一分钟才意识到Javascript控制台是可用的。它在窗口顶部显示为一个细条。触摸它可以扩展它。+1我从来不知道
    关于:debug
    我有一个HTC愿望2.3