如何在Xcode中查看PhoneGap应用的javascript错误?


Answers:


83

在Cordova / PhoneGap应用程序中查看和调试JavaScript错误的最优雅的方法是将Safari浏览器中的Web Inspector附加到iOS应用程序中的Web视图(但是,就像已经提到的Tom Clarkson一样,您至少需要iOS 6 )。

  • 在iPad或iPhone上,使用“设置”应用在Safari的“高级设置”中启用Web检查器
  • 通过USB将设备连接到Mac(然后它将显示在Safari的“开发”菜单下)
  • 启动您的应用
  • 导航到要调试的Web视图
  • 在Mac上,从Safari的Develop菜单中,从其子菜单中选择设备名称和应用程序(其HTML页面)
  • Web Inspector窗口将打开,使您能够浏览DOM,设置断点等。

OS X上Safari Develop菜单的屏幕转储

Apple有关设置的文档

详尽的第三方教程

另外,您可以在安装iOS WebKit调试代理后将Chrome的Web检查器连接到iOS设备。这也使您可以从Linux或Windows进行检查。

由于您可以在上述调试代理的顶部安装RemoteDebug iOS WebKit适配器,因此如今远程访问iOS的HTML,CSS和JavaScript变得更加灵活。因为此适配器将WebKit远程调试协议转换为Chrome调试协议,所以这些(在所有受支持的平台上)可以用作替代的调试和检查工具:

  • Visual Studio程式码
  • Chrome DevTools
  • Mozilla调试器

顺便说一句,使用Safari Web Inspector进行远程调试甚至可以与iOS Simulator结合使用。


每个iOS版本的桌面Safari最低版本

对于每个iOS版本,您都需要特定的最低版本的Desktop Safari才能使用远程Web检查,请参阅下面的列表。

iOS 6
Safari 6+
IOS 7
Safari 6.1+
iOS 8
Safari 7.1以上
iOS 9
Safari 8+
iOS 10
Safari 9 + / 10 +?请评论; 总是尝试Safari技术预览版
iOS 11
Safari 11+
iOS 12
Safari 12+

2
同意 使用Safari Web Inspector比Weinre更加健壮,并且比粘贴到JS lint工具中查找错误要快得多。它还允许您检查和操作DOM元素,这太棒了。我建议人们使用这种方法。
elMarquis 2014年

1
您看不到第一次加载消息,因为连接需要一些时间。
Adriano Spadoni

生产错误怎么办?就WebView而言,App绝不会崩溃,但其中的js可能会引发错误。因此,您在iTunes Connect上没有任何崩溃报告,但是用户会看到白屏。
Mirko

@Mirko Web检查器仅在调试中有用,与iTunes Connect无关。
ᴠɪɴᴄᴇɴᴛ

@Mirko您可以使用Cordova Crashlytics插件构建您的应用程序,也可以使用Google Firebase。
ᴠɪɴᴄᴇɴᴛ

47

将以下内容粘贴到文档开头附近,以使其在您的其他JavaScript之前执行。

<script type="text/javascript">
    window.onerror = function(message, url, lineNumber) {
        console.log("Error: "+message+" in "+url+" at line "+lineNumber);
    }
</script>

并在Xcode控制台窗口中查看有关Javascript错误的详细信息。

更新:以上技术将记录错误,例如未定义的变量。但是语法错误(例如缺少逗号)仍然会导致整个脚本中断,而不会记录任何内容。

因此,应将以下内容添加到onDeviceReady函数的开头:

console.log('Javascript OK');

如果在应用启动时未在日志窗口中看到“ JavaScript OK”,则表明您的某个地方存在语法错误。

为了避免寻找缺少的逗号,最简单的方法是将您的代码粘贴到这样的Javascript验证程序中:

http://www.javascriptlint.com/online_lint.php

让它为您找到错误。

希望这可以减轻调试的麻烦。


9

请注意,在0.9.2(今天发布)中,console.log已在跨平台的记录中标准化(不建议使用debug.log)。

桌面WebView上有一个可用的功能,该功能未捕获到iOS UIWebView中,该功能将捕获所有错误(我试图将该功能破解到使用私有API的插件中,但是该插件仅用于开发),但现在执行Kris上面建议的操作,然后在代码中尝试catch块并使用console.log

为了快速捕获可能的语法错误,在开发时,我将页面加载到了桌面Safari中,并使用可见的Webkit错误控制台快速刷新了页面。


1
对于Phonegap 1.1.0,Xcode 4.2 beta和带iOS 4.3的iPhone和带iOS 5.0模拟器的iPhone,这对我不起作用。我添加console.log(“ message”); 在有警报(“消息”)的地方打电话;可以,但是没有任何内容写入日志。有人知道出什么事了吗?
nmr

4
答案是... console.log在Phonegap初始化自身之后才起作用。我在body.onload中称呼它为时过早。
nmr

3

debug.log将消息发送到Phonegap中的XCode控制台(允许您记录异常结果或进行一些调试),但是,您必须在Safari中(在桌面或在打开调试控制台的iPhone上)。我还没有找到Javascript错误,这是由在iPhone上运行引起的,当在Safari中打开控制台进行调试时却没有出现(尽管我知道iPhone上的WebView和Safari之间有一些区别)。



3

如果您使用的是iOS 6,则只需将safari网络检查器(在桌面safari的开发菜单上)连接到您的应用即可获得完整的javascript调试功能。

在几个方面,它有一些局限性-启动错误和插件调用-但它在几乎所有其他方面都很有效。


1
到目前为止,这是最好的方法。它适用于插入式设备和IOS模拟器,并且比通过Weinre尝试实现相同功能更可靠。
elMarquis 2013年

3

为了使JavaScript调试在Xcode中工作,我将看以下内容。

http://phonegap.com/2011/05/18/debugging-phonegap-javascript/
http://www.daveoncode.com/2010/01/12/debugging-phonegap-applications-using-xcode-console/

就其他故障排除而言...
首先,您可以在PC上的safari中运行该应用程序,并利用safari的调试器(或chrome,因为两者都运行类似的渲染引擎)。这不会遇到高级逻辑错误和许多api问题,但至少应该可以帮助解决许多问题(基本javascript,HTML5等。)。


2

要查看JavaScript控制台中的所有错误,我同意使用此事件监听器

<script type="text/javascript">
    window.onerror = function(err,fn,ln) {alert("ERROR:" + err + ", " + fn + ":" + ln );};
    var errorVar = objectDoesntExists.properyDoesntExist;//this will simulate an error
</script>

但是,除非安装了cordova插件,否则它将不会在XCodes“控制台”上显示。转到项目文件夹并输入以下内容:

? cordova plugin add cordova-plugin-console

这将允许javascript命令'console.log('some string')在XCode上显示。

注意,您将需要git等。但是,如果您要在xcode中编辑phonegap项目,则很可能会拥有它!

PS确保在使用console.log之前先放置cordova.js脚本插件

<script type="text/javascript" src="/cordova.js"></script>

0

将其放在index.html的开头

<script type="text/javascript">
    window.onerror = function(err,fn,ln) {alert("ERROR:" + err + ", " + fn + ":" + ln);};
    var errorVar = objectDoesntExists.properyDoesntExist;//this will simulate an error
</script>

1
问题是在控制台而不是视图中说的。
2015年

-2

这是一种对我有用的简单方法:

  • cd到终端中包含index.html文件的目录
  • 通过调用(使用python 2.7)使用python启动http服务器:

    python -m SimpleHTTPServer

  • 通过在浏览器中输入HTTPServer的地址来查看野生动物园中的页面,对我来说URL为:

    http://0.0.0.0:8000/
    
  • 开放的开发人员工具:

    在chrome中,这是alt + command + i。查看控制台选项卡,可能需要刷新页面。

    在Safari中:Safari->首选项->高级->选中“显示开发菜单”。开发菜单->显示错误控制台(或alt + command + c)。刷新页面。按CTRL + 5会打开“问题”选项卡。


3
这仅在您的应用程序是简单的Web应用程序时才有效。调用PhoneGap /设备功能在标准浏览器中不起作用。
Xavier Poinas
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.