21

我正在将一个应用程序从 PhoneGap 1.9 升级到 PhoneGap 3.0。console.log() 函数不再起作用。以前,输出是在 XCode 控制台中编写的。恢复日志记录功能的最佳方法是什么?

我已阅读:PhoneGap 2.0 在 XCode 中不显示 console.log,但在 PhoneGap 3.0 中,即使在 deviceReady 事件之后,console.log 也不起作用。

我也有兴趣直接在 xcode 中查看 javascript 错误。

4

8 回答 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

于 2013-10-04T14:53:03.717 回答
30

事实证明,至少在我的情况下,deviceready记录器的那个函数没有被调用。中的最后一行logger.js

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

解决方案(或真正的解决方法)是logger.__onDeviceReady从您的deviceready侦听器函数中调用该函数:

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

document.addEventListener('deviceready', onDeviceReady, false);
于 2014-01-28T19:36:35.647 回答
9

我发现JSconsole.com 对于从移动设备远程捕获控制台日志非常有用。

以下是您的设置方式:

  1. 在您的应用程序 index.html 中,包含(更改 ID):

      <script src="http://jsconsole.com/remote.js?<MAKE UP SOME UNIQUE ID>"></script>
    
  2. 在您的计算机上,转到 jsconsole.com 并键入:listen <YOUR UNIQUE ID>

在您的移动设备上打开您的应用程序,您将在您的计算机上看到控制台日志。

于 2014-05-01T06:05:48.700 回答
6

按照 Sam 的答案添加控制台插件,并确保在每个页面上都包含 cordova.js,否则插件无法工作。

使用 phonegap 插件时,我在脚本标签中添加了 phonegap.js,然后我注意到插件(任何)仅适用于 index.html 页面。当我将 phonegap.js 更改为 cordova.js 时,插件(通知、相机等)开始在其余页面上工作。如果这对任何人都有帮助。

于 2013-11-01T10:53:05.883 回答
3

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

phonegap run iOS

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

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

对于IOS。所有控制台日志都按预期显示。

于 2013-11-30T01:59:08.560 回答
3

问题

通过命令行界面将控制台插件添加到 ios 平台(或重新安装后)时,会出现以下或类似的错误消息:

“CDVPlugin 类 CDVLogger (pluginName: Console) 不存在。”

解决方案

打开您的 Xcode 项目并转到“构建阶段”选项卡。现在打开名为“Compile Sources”的下拉菜单。单击列表末尾的“+”号并添加“CDVLogger.m”或任何其他缺少的源。

于 2013-12-28T06:09:38.293 回答
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' )
  }
于 2014-01-14T16:06:03.530 回答
0

我发现GapDebug真的很有用。与其他任何东西不同 [cough咳 weinre],它让您可以从本地应用程序控制台日志

于 2014-10-16T15:42:52.620 回答