如何在Android上调试JavaScript?


281

我正在从事一个涉及Raphaeljs的项目。原来,它在Android上不起作用。它可以在iPhone上使用。

我该如何在Android浏览器上调试某些东西?它是WebKit,因此,如果我知道版本,是否可以在WebKit的完整版本上对其进行调试会产生相同的结果?


2
脱离主题,但考虑签出Snap.svg。这是同一个人对RaphaelJS的翻拍。它被重建,而不支持旧的浏览器,所以它更快,代码更干净,等
约什梅萨罗斯

可接受答案的注意事项:在Samsung Experience> = 9中,如果找不到设备,请将USB类型切换为声音接口。
BOZ

Answers:


245

更新:远程调试

以前,控制台日志记录是在Android上调试JavaScript的最佳选择。如今,借助Chrome for Android的远程调试功能,我们可以充分利用Android上的Chrome for Desktop开发人员工具的所有优势。查看https://developers.google.com/chrome-developer-tools/docs/remote-debugging了解更多信息。


更新:JavaScript控制台

您也可以导航到URL栏中的about:debug,以激活调试菜单和带有最新Android设备的JavaScript错误控制台。您应该在浏览器顶部看到SHOW JAVASCRIPT CONSOLE。

当前在Android 4.0.3(冰淇淋三明治)中,logcat输出到浏览器通道。因此您可以使用过滤adb logcat browser:* *:S


原始答案

您可以使用内置的consoleJavaScript对象打印可以查看的日志消息adb logcat

console.error('1');
console.info('2');
console.log('3');
console.warn('4')

产生以下输出:

D/WebCore (  165): Console: 1 line: 0 source: http://...
D/WebCore (  165): Console: 2 line: 0 source: http://...
D/WebCore (  165): Console: 3 line: 0 source: http://...
D/WebCore (  165): Console: 4 line: 0 source: http://...

确定WebKit的版本

如果您javascript:alert(navigator.userAgent)在位置栏中输入内容,则会看到列出的WebKit版本,例如

在Chrome中: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.221.6 Safari/532.2

在Android模拟器上 Mozilla/5.0 (Linux; U; Android 1.6; en-us; sdk Build/DRC76) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1

NB

不属于Safari版本的WebKit版本在版本号后带有+,其版本号通常高于最新发布的WebKit版本。因此,例如528+是WebKit的非正式版本,比Safari 3.1.2附带的525.x版本要新。


12
何时可以在无法进行远程调试的情况下在Android上进行本地调试?
迈克尔

不确定。在像电话这样的小型设备上这没有多大意义,因为对于完整的Web Inspector来说,屏幕空间非常有限。在平板电脑上,这可能更有意义,但他们必须重新设计Web Inspector的触摸界面,这是一项巨大的工作。也许他们正在努力,但谁知道。
皮埃尔·安东尼·拉斐特

1
我怀疑没有任何重大修改的第一个版本将是一个好的开始,即允许使用大量功能。某些平板电脑甚至具有手写笔,因此鼠标事件可以相同地工作。
迈克尔

像电话这样的小型设备到底是什么呢?!!?!? bestbuy.com/site/samsung-galaxy-view-18-4-32gb-black/...
迈克尔·狄龙

Chrome for Android远程调试链接中的注释:“您应该使用您的Google帐户之一登录Chrome。远程调试在隐身模式或访客模式下不起作用。” 哇,为什么?
sdbbs

135

尝试:

  1. 打开您要调试的页面
  2. 在该页面上,在常规Android浏览器的地址栏中输入:

    about:debug 

    (请注意,什么也没有发生,但是启用了一些新选项。)

适用于我尝试过的设备。在Android浏览器的about:debug上了解更多信息,这些设置有什么作用?

编辑: 还可以帮助检索更多信息(例如行号)的方法是将此代码添加到脚本中:

window.onerror = function (message, url, lineNo){
    console.log('Error: ' + message + '\n' + 'Line Number: ' + lineNo);
    return true;
}

23
我刚刚尝试过,但是about:debug技巧在带有ICS 4.0.3的Nexus S上不起作用。
derflocki 2012年

6
您应该尝试about:debug从打开当前页面的同一选项卡中导航至。而不是导航,它将在顶部显示“ SHOW JAVASCRIPT CONSOLE”。如果您尝试about:debug从新标签访问,则无法使用。
丹尼尔森·萨迈亚

10
这只是股票浏览器,对不对?我正在KitKat上的Android版Chrome浏览器中试用它,但没有任何运气。(似乎KitKat不再具有股票浏览器)
詹姆斯

7
这需要一个Android股票浏览器,并且不能在Chrome上使用:)
giorgio79 2014年

6
如果您的制造商使用的是Kitkat库存浏览器,则为Chromium。about:debug确实转发到上面chrome://debug,上面写着“找不到”,但Debug在设置中显示了一个选项。在随后打开新选项卡之前,某些选项不会生效。
2014年


21

我使用的是Weinre,它是Apache Cordova的一部分。

使用Weinre,我可以在桌面浏览器中获得Google Chrome的调试控制台,并且可以将Android连接到该调试控制台,并调试HTML和CSS。我可以在控制台中执行Javascript命令,它们会影响Android浏览器中的网页。来自Android的日志消息出现在桌面调试控制台中。

但是,我认为无法查看或逐步查看实际的Javascript代码。因此,我将Weinre与日志消息结合在一起。

(我对JConsole不太了解,但在我看来,JConsole无法进行HTML和CSS检查,仅Javascript命令和日志记录(?)。)



我已经尝试过Weinre,但对该工具却不太满意。日志不是很可靠。一些错误未显示。即使显示了它们,Weinre也只显示错误消息,没有堆栈跟踪。那完全让我生气。
刘易斯

我已经尝试过Weinre,但对该工具却不太满意。日志不是很可靠。一些错误未显示。即使显示了它们,Weinre也只显示错误消息,没有堆栈跟踪。那完全让我生气。
刘易斯

17

看看jsHybugger。它将允许您针对以下方面远程调试js代码:

  • Android混合应用程序(Webview,Phonegap,Worklight)
  • 默认的android浏览器中运行的网页(不是Chrome,它支持不带此工具的ADB扩展名)

工作原理(项目站点上的更多详细信息和替代方法,这是我发现的最佳方法)。

  1. 在设备上安装jsHybugger APK
  2. 在设备上启用USB调试。
  3. 通过USB将Android设备插入台式机
  4. 在Android设备('jsHybugger')上运行应用
  5. 在应用程序中输入目标URL和页面。按启动服务,最后打开浏览器
    • 您将看到一个已安装浏览器的列表,选择一个。
    • 浏览器启动。
  6. 返回台式机,然后打开Chrome到chrome:// inspect /
  7. 将出现一个检查器窗口,其中包含与Android设备上的页面链接的chrome调试工具。
  8. 调试一下!

同样,对于Android上的Chrome,请使用不带jsHybugger的ADB扩展。我认为已经在对此问题的可接受答案中对此进行了描述。


为什么这被否决?它是唯一支持在本机应用程序内部远程调试webView的工具之一。
阿尔菲·汉森

因为它没有说明如何执行操作,而是将您指向整个项目的链接,所以您在真正成功之前必须进行大量的挖掘
Adaptabi 2013年

2
这个工具实际上非常好,解决了我的问题。太糟糕了,我不得不四处搜寻,而不是看到有人回答,因为有人决定将其埋葬。(我首先在这里结束了)我将添加一些细节来改进此答案,看看整个SO的工作原理是什么?
Aardvark 2013年

jsHybugger APK已不再在Google Play上提供或下载。该项目存储在这里:github.com/dcendents/jsHybugger ; 但似乎未包含生成APK的代码。
阿德里安·赫斯库

14

仅供参考,RaphaelJS无法在android上运行的原因是android webkit(与iPhone webkit不同)目前不支持SVG。Google直到最近才得出结论,SVG支持Android是个好主意,因此它将在一段时间内不可用。


感谢Ludvig,在最初的帖子发表后不久就想出了这一点,但希望能跟进。
jvenema 2011年

这不是主要问题的答案,请在注释(或单独的问题)中将其删除。
PJ Brunet

12

在Android 5.1.1上的Galaxy S6上对Android本机浏览器进行完整的Chrome远程调试:

  1. 在手机上启用USB调试(设置,关于,快速点按内部版本号,开发人员设置,USB调试)
  2. 打开“互联网”
  3. 导航到“ about:debug”(您将看到一个错误)
  4. 更多菜单>设置>调试>远程调试
  5. 使用USB电缆将手机连接到计算机
  6. 在电话上,在Internet Web浏览器中,打开要调试的站点
  7. 在计算机上打开Chrome
  8. 导航到“ chrome:// inspect”
  9. 在要检查的浏览器选项卡上单击检查

Galaxy S5设备在Chrome中显示,但选项卡仅在重新启动后显示。重新启动并尝试附加后,移动浏览器崩溃。


5

3.0之前的Android浏览器不支持Raphael,这就是您的问题所在。他们不支持SVG图形。它确实支持画布。如果不需要设置动画,则可以使用canvg渲染图形:

http://code.google.com/p/canvg/

这就是我们在默认的Android浏览器中呈现SVG图标的方法。


5

about:debug(或chrome:\\debug两者说的页面不能被发现,但能够在设置调试菜单)上三星Tab键在Chrome或Opera试图在Android 4.4.2奇巧时

如果您在设备上具有ROOT权限,则可以直接在设备上查看控制台消息。使用CatLog之类的应用来查看日志输出-https://play.google.com/store/apps/details?id=com.nolanlawson.logcat &hl=zh_CN这将使您查看所有logcat活动。

在Android KitKat / 4.4.2中,浏览器控制台输出到Chromium通道。您可以按“ Chromium”进行筛选以获取所有浏览器活动(包括浏览器的内部活动),也可以按“ Console”进行筛选以仅查看浏览器控制台日志。

chromium [INFO:CONSOLE(3)]  "The key "x-minimal-ui" is not recognized and ignored.", source http://mywebsite.com/ (3)

5

放入地址栏chrome://about。您将看到所有可能的开发页面的链接。


6
是的,但是没有任何控制台可用
Nico

3

您可以尝试YConsole一个js嵌入式控制台。它重量轻且易于使用。

  • 捕获日志和错误。
  • 对象编辑器。

如何使用 :

<script type="text/javascript" src="js/YConsole-compiled.js"></script>
<script type="text/javascript" >YConsole.show();</script>

这非常适合在移动设备上调试javascript。谢谢
ako

3

运行Android模拟器时,打开Goog​​le Chrome浏览器,然后在“地址字段”中输入:

chrome://inspect/#devices

您会看到一个远程目标列表。找到目标,然后单击“检查”链接。


我不知道为什么这个答案没有得到更多的认可。它非常简单,适用于仿真器和物理设备
Frank

3

Chrome具有出色的功能,只需将实际的Android Chrome内容(包括检查等)带到PC屏幕上...

  • 在设备上启用USB调试,也许您还需要通过一次连接adb devices来触发移动设备上的“允许与...通信”对话框,
  • 将Android设备连接到PC,
  • 都启动Chrome,并且
  • 然后chrome://inspect/#devices在PC上导航到。
  • 在此,列出了可浏览的来自手机Chrome的标签。

网上也有详细的手册:https//www.till.net/technologie/html-javascript/remote-web-debugging-unter-android-und-chrome

(发现adb logcat浏览器什么也没显示之后)




0

如果您正在寻找非远程选项:

如果通过adb一次授予了android.permission.READL_LOGS,则在较早且无根的Jellybean版本中,可以使用logcat查看器。

在firefox上,有一个控制台插件可以读取并显示所有应用程序日志,还有firebug lite


0

您可以通过运行“ npm install javascript-compiler-deva”命令,然后运行“ node.com.js”运行编译器,从npm库尝试“ javascript-compiler-deva”。

它在端口8888上创建一个服务器。然后您可以单击“ http:// localhost:8888 ”并输入您的JavaScript代码,并可以在电话浏览器本身中查看任何JavaScript代码的结果,包括“ console.log”。

它还托管在“ https://javascript-compiler-deva.herokuapp.com/ ”中


0

本地调试/ about:config ...选项似乎在2020+ chrome / ff / ..浏览器中不再起作用。

另一个具有非远程JS控制台的浏览器是 DevBrowser

WebInspector (文件选择器不起作用)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.