我正在用HTML开发应用程序,它从Javascript调用console.log()
,在开发期间为我提供有关网页代码中发生的事情的日志。
不幸的是,当我使用adb logcat
命令检查日志时,我可以看到来自所有其他应用程序的输出,但不能看到我的JavaScript代码的输出。我甚至可以从Web浏览器看到加载页面的日志,但不能从我在Web浏览器中执行的JavaScript代码输出console.log()
。
根据有关this page(http://developer.android.com/guide/webapps/debugging.html)的信息,它应该有效。
我正在测试 HTC WildFire 和 HTC Desire HD 。
超过6个月后编辑
经过一段时间和使用不同设备(手机,电视,机顶盒,WebViews,UIWebViews ......)的经验,我的建议是从JavaScript执行远程日志记录而不依赖于< strong> console.log()或其他方法 - 请参阅图片加载here的好技巧。
不要错过演示文稿here 希望这可以帮助! 斯登
答案 0 :(得分:29)
在Android 2.3.3的默认浏览器中(可能从那时开始),你可以简单地使用内置的javascript控制台:
about:debug
,然后按Enter 在顶部,您会看到标有“JavaScript控制台”的栏。
答案 1 :(得分:12)
我一直在使用三种不同的HTC手机,几乎完全没有这个问题。以下是一些要检查的事项:
打开USB调试:
设置覆盖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调试复选框。