【问题标题】:How can I debug javascript on Android?如何在 Android 上调试 javascript?
【发布时间】:2011-01-19 20:52:06
【问题描述】:

我正在开展一个涉及 Raphaeljs 的项目。事实证明,它不适用于Android。 确实在 iPhone 上。

我要如何在 Android 浏览器上调试一些东西?它是 WebKit,所以如果我知道版本,在那个 full 版本的 WebKit 上调试它会产生相同的结果吗?

【问题讨论】:

标签: android debugging webkit


【解决方案1】:

更新:远程调试

以前,控制台日志记录是在 Android 上调试 JavaScript 的最佳选择。这些天来,使用 Chrome for Android 远程调试,我们能够在 Android 上利用 Chrome for Desktop Developer Tools 的所有优点。查看https://developers.google.com/chrome-developer-tools/docs/remote-debugging 了解更多信息。


更新:JavaScript 控制台

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

目前在 Android 4.0.3 (Ice Cream Sandwich) 中,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://...

确定 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

在安卓模拟器上 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 上进行本地调试,而当我无法远程调试时?
  • 不确定。这在手机等小型设备上没有多大意义,因为屏幕空间对于完整的 Web Inspector 来说非常有限。在平板电脑上这可能更有意义,但他们必须重新构想 Web Inspector 的触摸界面,这是一项重大的努力。也许他们正在努力,但谁知道呢。
  • 我怀疑没有任何重大调整的第一次剪辑将是一个好的开始,即允许使用大量功能。有些平板电脑甚至有触控笔,因此鼠标事件也可以正常工作。
  • 像手机这样的小设备是怎么回事!?!?!? bestbuy.com/site/samsung-galaxy-view-18-4-32gb-black/…
  • Chrome for Android 远程调试链接中的注释:“您应该使用您的 Google 帐户之一登录 Chrome。远程调试在隐身模式或访客模式下不起作用。”哇,为什么?
【解决方案2】:

仅供参考,RaphaelJS 无法在 android 上运行的原因是 android webkit(与 iPhone webkit 不同)目前不支持 SVG。谷歌最近才得出结论,Android 支持 SVG 是个好主意,所以它在一段时间内还不能使用。

【讨论】:

  • 感谢 Ludvig,在原帖发布后不久就发现了这一点,但后续工作很好。
  • 这不是主要问题的答案,请将其作为评论(或单独的问题)并删除。
【解决方案3】:

试试:

  1. 打开要调试的页面
  2. 在该页面上,在普通 Android 浏览器的地址栏中,键入:

    about:debug 
    

    (注意没有任何反应,但一些新选项已启用。)

适用于我尝试过的设备。阅读更多关于Android browser's about:debug, what do those settings do?

编辑: 还有助于检索更多信息(如行号)是将此代码添加到您的脚本中:

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

【讨论】:

  • 我刚刚尝试过,但是 about:debug 技巧在我的 Nexus S 上无法使用 ICS 4.0.3。
  • 您应该尝试从打开当前页面的同一选项卡中导航到about:debug。它不会导航,而是在顶部显示“SHOW JAVASCRIPT CONSOLE”。如果您尝试从新标签页访问about:debug,它将无法正常工作。
  • 这只是股票浏览器,对吧?我在 KitKat 上的 Chrome for Android 测试版中尝试它,但没有任何运气。 (似乎奇巧不再有股票浏览器)
  • 这需要一个Android股票浏览器,它在Chrome上不起作用:)
  • Kitkat 库存浏览器,如果您的制造商使用它,是 Chromium。 about:debug 真正转发到 chrome://debug,上面写着“找不到”,但在设置中显示了 Debug 选项。在之后打开新标签页之前,某些选项不会生效。
【解决方案4】:

http://jsconsole.com (http://jsconsole.com/remote-debugging.html) 提供了一种访问网页内容的好方法。

【讨论】:

  • jsconsole.com 自 2017 年 9 月起不再支持远程调试。我在 jsconsole.net 创建了一个可免费使用的替代站点 :)
  • @StevenLove 您的页面无法正常工作。
【解决方案5】:

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

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

但是,我认为无法查看或单步执行实际的 Javascript 代码。所以我将 Weinre 与日志消息结合起来。

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

【讨论】:

  • stackoverflow.com/questions/13330221/…添加了 OS X 上 weinr 的分步指南
  • 我已经尝试过 Weinre,但我对这个工具不是很满意。日志不是很可靠。一些错误没有显示。即使它们被显示,Weinre 也只显示错误消息,没有堆栈跟踪。这让我很生气。
  • 我已经尝试过 Weinre,但我对这个工具不是很满意。日志不是很可靠。一些错误没有显示。即使它们被显示,Weinre 也只显示错误消息,没有堆栈跟踪。这让我很生气。
【解决方案6】:

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

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

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

【讨论】:

    【解决方案7】:

    看看jsHybugger。它将允许您远程调试您的 js 代码:

    • Android 混合应用(webview、phonegap、worklight)
    • 默认安卓浏览器中运行的网页(不是 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 扩展。我认为这已经在这个问题的公认答案中描述了。

    【讨论】:

    • 为什么这被否决了?它是唯一支持在本机应用程序内远程调试 webViews 的工具之一。
    • 因为它没有说明怎么做,只是它指向你整个项目的链接,所以你必须自己挖掘很多才能真正成功
    • 这个工具其实还不错,解决了我的问题。太糟糕了,因为 有人 决定埋葬它,所以我不得不四处搜索它而不是看到这个答案。 (我首先来到这里)我将添加一些细节来改进这个答案,看看这整个 SO 是如何工作的?
    • jsHybugger APK 在 Google Play 上不再可用,也不再可供下载。项目存放在这里:github.com/dcendents/jsHybugger;但似乎没有包含生成 APK 的代码。
    【解决方案8】:

    在三星选项卡上的 Android KitKat 4.4.2 上的 Chrome 或 Opera 上尝试时,about:debug(或 chrome:\\debug 都表示找不到页面,但在设置中启用“调试”菜单)

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

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

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

    【讨论】:

      【解决方案9】:

      我的解决方案是(针对股票浏览器):

      • 股票浏览器
      • “consolo.log”进入JS源代码
      • 调试 USB 已启用
      • Android SDK
      • 来自 Android SDK:monitor.bat
      • 监控过滤器作为附加图像

      【讨论】:

        【解决方案10】:

        你可以试试YConsole一个js嵌入式控制台。它轻巧且易于使用。

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

        如何使用:

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

        【讨论】:

          【解决方案11】:

          Android 5.1.1 上 Galaxy S6 上 Android 原生浏览器的完整 Chrome 远程调试:

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

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

          【讨论】:

            【解决方案12】:

            Android Studio 提供查看console.log 和其他所需的一切。在 logcat 中,只需过滤到“/Web 控制台”,您就会看到您的 js 日志...

            如果您遇到任何问题,您可以添加此插件: https://github.com/apache/cordova-plugin-console

            【讨论】:

              【解决方案13】:

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

              【讨论】:

              • 是的,但是控制台什么都没有
              【解决方案14】:

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

              在早期和非 root 的 Jellybean 版本中,如果 android.permission.READL_LOGS 通过 adb 授予一次,则可以使用 logcat 查看器。

              在 Firefox 上,有一个console addon 可以读取并显示所有应用程序日志,还有一个firebug lite

              【讨论】:

                【解决方案15】:

                运行安卓模拟器时,打开谷歌Chrome浏览器,在“地址栏”输入:

                chrome://inspect/#devices
                

                您将看到远程目标列表。找到您的目标,然后点击“检查”链接。

                【讨论】:

                • 我不知道为什么这个答案没有得到更多的认可。它非常简单,适用于模拟器和物理设备
                【解决方案16】:

                您可以通过运行“npm install javascript-compiler-deva”命令,然后使用“node compiler.js”运行 compiler.is,从 npm 库中尝试“javascript-compiler-deva”。

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

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

                【讨论】:

                  【解决方案17】:

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

                  • 在设备上启用 USB 调试,可能您还需要通过adb devices 连接一次,以触发移动设备上的“允许与...通信”对话框,
                  • 将 Android 设备连接到 PC,
                  • 同时启动 Chrome,然后
                  • 然后在 PC 上导航到 chrome://inspect/#devices
                  • 此处列出了手机 Chrome 中的选项卡,可以对其进行检查。

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

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

                  【讨论】:

                    【解决方案18】:

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

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

                    WebInspector (文件选择器不工作)

                    【讨论】:

                      【解决方案19】:

                      没有人提到liriliri/eruda,它为移动网站/应用程序添加了自己的调试工具

                      将此添加到您的页面:

                      <script src="//cdn.jsdelivr.net/npm/eruda"></script>
                      <script>eruda.init();</script>
                      

                      将在您的页面上添加一个浮动图标以打开控制台。

                      【讨论】:

                        【解决方案20】:

                        你可以试试https://github.com/fullpipe/screen-log。试图让它干净简单。

                        【讨论】:

                          【解决方案21】:

                          有一个名为 OutFront JS 的 npm 插件,您可以使用它来调试移动浏览器。

                          它基本上将控制台中的所有消息、警告和错误记录到屏幕上的弹出窗口中。

                          【讨论】:

                            猜你喜欢
                            • 2011-09-13
                            • 1970-01-01
                            • 2012-05-17
                            • 1970-01-01
                            • 1970-01-01
                            • 2021-09-21
                            • 1970-01-01
                            相关资源
                            最近更新 更多