我正在进行一个涉及 Raphaeljs 的项目。结果发现,它在安卓上无法工作,但在 iPhone 上可以。
我该如何在安卓浏览器上调试?它使用的是 WebKit,所以如果我知道版本号,能否在完整版本的 WebKit 上调试并获得相同的结果?
我正在进行一个涉及 Raphaeljs 的项目。结果发现,它在安卓上无法工作,但在 iPhone 上可以。
我该如何在安卓浏览器上调试?它使用的是 WebKit,所以如果我知道版本号,能否在完整版本的 WebKit 上调试并获得相同的结果?
更新:远程调试
以前,在Android上调试JavaScript时,控制台记录是最好的选择。现在,有了Chrome for Android远程调试,我们可以在Android上使用Chrome for Desktop开发者工具的所有好处。欲了解更多信息,请访问https://developers.google.com/chrome-developer-tools/docs/remote-debugging。
更新:JavaScript控制台
您还可以在URL栏中导航到about:debug来激活调试菜单和JavaScript错误控制台,适用于最近的Android设备。您应该在浏览器顶部看到“SHOW JAVASCRIPT CONSOLE”。
目前在Android 4.0.3(冰淇淋三明治)中,logcat输出到浏览器频道。因此,您可以使用adb logcat browser:* *:S
进行过滤。
原始答案
您可以使用内置的console
JavaScript对象打印日志消息,然后使用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://...
javascript:alert(navigator.userAgent)
,您将看到列出的 WebKit 版本,例如: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
注意:
不是 Safari 发布版本的 WebKit 版本号后面会有一个 + 号,并且它们的版本号通常比 WebKit 的最新发布版本高。例如,528+ 是一个非官方构建的 WebKit 版本,它比作为 Safari 3.1.2 一部分发布的 525.x 版本更新。尝试:
在该页面中,在原生Android浏览器的地址栏中键入:
about:debug
(请注意,没有任何事情发生,但已启用一些新选项。)
我尝试过的设备上都有效。在Android浏览器的about:debug中了解更多信息,这些设置有什么作用?
编辑:另外,有助于检索更多信息(例如行号)的是向脚本添加此代码:
window.onerror = function (message, url, lineNo){
console.log('Error: ' + message + '\n' + 'Line Number: ' + lineNo);
return true;
}
about:debug
。它不会跳转到新的页面,而是在页面顶部显示“显示JavaScript控制台”。如果您尝试从新标签页访问about:debug
,它将无法正常工作。 - Denilson Sá Maiaabout:debug
实际上会转到chrome://debug
,显示“找不到”,但在设置中显示了“调试”选项。其中一些选项直到打开新标签后才会生效。 - cdehttp://jsconsole.com(http://jsconsole.com/remote-debugging.html)提供了一种很好的方式,让您可以访问网页内容。
通过Weinre,我可以在桌面浏览器中获得Google Chrome的调试控制台,并连接到该调试控制台的Android设备上,以调试HTML和CSS。我可以在控制台中执行Javascript命令,并且它们会影响Android浏览器中的Web页面。来自Android的日志消息显示在桌面调试控制台中。
然而,我认为不可能查看或浏览实际的Javascript代码。因此,我将Weinre与日志消息结合使用。
(我对JConsole了解不多,但我认为在JConsole中无法进行HTML和CSS检查,只能使用Javascript命令和日志记录(?)。)
看一下jsHybugger,它将允许您远程调试以下JS代码:
它是如何工作的(更多细节和替代方案请参见项目站点,这是我发现的最佳方法)。
同样,在Android上使用Chrome时,可以使用ADB扩展而不需要jsHybugger。我认为这已经在回答此问题的被接受答案中描述过了。
如何在Android 5.1.1上的Galaxy S6手机上全面启用Chrome远程调试原生浏览器:
Galaxy S5设备在Chrome中显示,但选项卡仅在重新启动后才显示。 在重启并尝试附加后,移动浏览器会崩溃。
顺便提一下,RaphaelJS在安卓设备上无法工作的原因是因为安卓的Webkit(与iPhone的Webkit不同)目前不支持SVG。谷歌最近才得出结论,认为在安卓上支持SVG是个好主意,所以它暂时还不可用。
Chrome拥有一个很棒的功能,可以将Android Chrome的实际内容(包括检查等)直接传输到PC屏幕上...
adb devices
连接一次,以触发移动设备上的“允许通信”的对话框,chrome://inspect/#devices
。还有一份详细的手册可供参考:https://www.till.net/technologie/html-javascript/remote-web-debugging-unter-android-und-chrome
(在经过adb logcat
无果后,发现了上述手册)
在地址栏中输入 chrome://about
。您将看到所有可能的开发页面链接。
Raphael在3.0之前的Android浏览器上不受支持,这就是你的问题所在。它们不支持SVG图形。但是它确实支持canvas。如果您不需要对其进行动画处理,则可以使用canvg呈现图形:
这就是我们在默认的Android浏览器中呈现SVG图标时遇到问题时的解决方案。