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

moc*_*kee 82 javascript debugging xcode ios cordova

我想在Xcode中调试我的PhoneGap应用程序,但其控制台无法显示javascript错误.

ᴠɪɴ*_*ᴇɴᴛ 82

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

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

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

关于设置的苹果文档:https://developer.apple.com/library/content/documentation/AppleApplications/Conceptual/Safari_Developer_Guide/GettingStarted/GettingStarted.html

完整的第三方教程:http:
//webdesign.tutsplus.com/tutorials/workflow-tutorials/quick-tip-using-web-inspector-to-debug-mobile-safari/

或者,您可以在安装调试代理后将Chrome的Web Inspector连接到iOS设备:https://github.com/google/ios-webkit-debug-proxy/.这也开启了从Linux进行检查的能力.甚至可以通过具有专用Chrome代理的Windows远程访问iOS的HTML,CSS和JavaScript:https://github.com/artygus/ios-webkit-debug-proxy-win32.

顺便说一句,使用Safari Web Inspector进行远程调试也可以与iOS模拟器结合使用.


每个iOS版本的Desktop 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+?或者甚至是技术预览版?通过评论获得帮助.)
iOS 11
Safari 11+

  • 同意.使用safari Web检查器比Weinre更强大,并且发现错误要比粘贴到JS lint工具快得多.它还允许您检查和操作DOM元素,这非常棒.我建议民间使用这种方法. (2认同)
  • 您无法看到首次加载消息,因为连接需要一些时间。 (2认同)

elM*_*uis 46

将以下内容粘贴到文档开头附近,以便在任何其他JavaScript之前执行.

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

并享受在Xcode控制台窗口中查看Javascript错误的详细信息.

更新:上述技术将记录未定义变量等错误.但是语法错误(例如缺少逗号)仍会导致整个脚本在没有记录任何内容的情况下中断.

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

console.log('Javascript OK');
Run Code Online (Sandbox Code Playgroud)

如果您在应用程序启动时没有在日志窗口中看到"JavaScript OK",则表示您在某处出现语法错误.

为了节省缺少逗号的搜索,最简单的方法是将代码粘贴到Javascript验证器中,例如:

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

让它为你找到错误.

希望这会带来一些调试的痛苦.


Sha*_*ron 9

请注意,对于0.9.2(今天发布),console.log已在各个平台上标准化以进行日志记录(不推荐使用debug.log).

桌面WebView上有一个功能可以在iOS UIWebView中公开,它将捕获所有错误(我试图将该功能破解为插件,该插件使用私有API,但该插件仅用于开发),但是现在做Kris上面提到的并在代码上放置try catch块并使用console.log

为了快速捕获可能的语法错误,在开发时我已经在桌面Safari中加载了页面并使用webkit错误控制台可以快速刷新它.

  • 答案是......在Phonegap初始化之后,console.log才能工作.我在body.onload中调用它,这太早了. (4认同)

Kri*_*son 3

debug.log 会将消息发送到 Phonegap 中的 XCode 控制台(允许您记录异常结果或进行一些调试),但是,您必须在 Safari 中调试其他 javascript 错误(无论是在桌面上还是在桌面上),这是正确的。在打开调试控制台的 iPhone 上)。我还没有发现 Javascript 错误,该错误是由在 iphone 上运行引起的,并且在 Safari 中打开控制台进行调试时不存在(尽管我知道 iphone 上的 WebView 和 Safari 之间存在一些差异)。