在iOS PhoneGap 3.0应用中,console.log无法工作

21
我正在将一个应用程序从PhoneGap 1.9升级到PhoneGap 3.0。console.log()函数不再起作用了。以前,输出会写入XCode控制台。恢复日志记录功能的最佳方法是什么?
我已经阅读了这篇文章:PhoneGap 2.0 doesn't show console.log in XCode但在PhoneGap 3.0上,即使在deviceReady事件之后,console.log仍然无法工作。
我还想直接在xcode中查看JavaScript错误。
8个回答

31

您需要将调试控制台插件添加到您的项目中:

phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git

在较新版本的PhoneGap/Cordova中,要向您的项目添加调试控制台插件,请执行以下操作: cordova plugin add org.apache.cordova.console

2
它是否可以直接使用?我在我的Xcode控制台中没有得到任何额外的日志。 - poiuytrez
7
它可以在一个简单的hello world项目中运行,但无法在我的实际应用程序项目中运行。这让我疯狂了。 - poiuytrez
2
你能在Xcode控制台中看到语法或任何错误吗?即使在HelloWorld中,我也无法在控制台中看到错误。 - poiuytrez
1
我遇到了错误:“[error] 找不到项目目录”。有人知道是什么问题吗?谢谢。 - Water7
2
我们已经添加了插件并确保phonegap.js在任何对“console.log”的调用之上,但在Xcode中仍然没有任何显示。有什么线索吗? - Crashalot
显示剩余4条评论

30

事实证明,在我的情况下,记录器的 deviceready 函数未被调用。这是在 logger.js 中的最后一行。

document.addEventListener("deviceready", logger.__onDeviceReady, false);

解决方案(或者说是一种变通方法)是从你的deviceready监听函数中调用logger.__onDeviceReady函数:

解决方案(或者说是一种变通方法)是从你的 deviceready 监听器函数中调用 logger.__onDeviceReady 函数:

function onDeviceReady() {
    if (window.cordova.logger) {
        window.cordova.logger.__onDeviceReady();
    }
}

document.addEventListener('deviceready', onDeviceReady, false);

我的问题是 - 它在一个HelloWorld项目中可以工作,但在我从我的(主)Android项目合并“www”文件夹代码后就无法工作。你的解决方案救了我! - Kozuch
1
这也解决了我的破损 console.log。 - Ellery Familia
1
这也解决了我的console.log问题。 - Gilana

9
我发现JSconsole.com非常有用,可以远程捕获移动设备的控制台日志。
以下是设置步骤:
  1. In you apps index.html, Include(change the ID):

      <script src="http://jsconsole.com/remote.js?<MAKE UP SOME UNIQUE ID>"></script>
    
  2. On your computer, Go to jsconsole.com and type :listen <YOUR UNIQUE ID>
在您的移动设备上打开应用程序,您将在计算机上看到控制台日志。

我无法包含来自另一个域的脚本。有帮助吗?(请发送链接) - redolent

6

按照Sam的回答添加控制台插件,并确保在每个页面上都包含cordova.js,否则没有插件可用。

使用PhoneGap插件时,我在脚本标签中添加了phonegap.js,然后注意到插件(任何插件)仅在index.html页面上起作用。 当我将phonegap.js更改为cordova.js时,插件(通知、相机等)开始在其他页面上工作。 如果对任何人有所帮助,请尝试此方法。


3
问题:
通过命令行界面将控制台插件添加到ios平台(或重新安装后),会出现以下或类似的错误消息:
“CDVPlugin类CDVLogger(pluginName:Console)不存在。”
解决方案:
打开您的Xcode项目,进入“Build Phases”选项卡。现在打开名为“Compile Sources”的下拉列表。单击列表末尾的“+”号并添加“CDVLogger.m”或任何其他缺失的源文件。

3
除了添加控制台插件,我还有一个假设是为什么它可能无法正常工作的:在Phonegap中,console.log被异步调用,因此如果未来的调用失败,整个函数将失败,并且所有的日志调用都将被忽略。
  receivedEvent = function( id ) {
    alert( 'This message is displayed because alert is called synchronously ')
    console.log( 'This will not be displayed in Phonegap only in browser' )
    callingAFunctionWhichDoesNotExist()
    console.log( 'This will neither be displayed in Phonegap nor in browser' )
  }

这与我所看到的相符。这使得调试变得非常困难。有没有什么解决办法? - Leo

3
如果您已经安装了Cordova控制台插件,那么当您运行应用程序时:
phonegap run iOS

您可以在以下位置找到日志:

[your project dir]/platforms/ios/cordova/console.log

对于IOS而言,所有的控制台日志都能如预期般展示。


我在尝试重新安装插件时,发现找不到文件console.log。显示已安装且一切正常。 - Cherif
2
针对@Cherif之前的评论(以防其他人来到这里),您将不得不运行rm plugin命令,对于配置问题,该线程(https://dev59.com/umMl5IYBdhLWcg3wbGl2#23934073)很好并且在安装插件后帮助我解决构建错误。运行rm命令<code>cordova plugin rm org.apache.cordova.console</code>,然后尝试再次安装。如果您再次遇到构建错误,请查看其他SO线程。 - JacquelineIO

0

我发现GapDebug非常有用。与其他任何工具不同,它可以让你从本地应用程序中记录控制台日志。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接