Cordova 3.3.1-0.1.2(Phonegap)插件不起作用

时间:2014-01-27 18:28:59

标签: android ios git plugins cordova

我有一个针对iOS的cordova 3.3.1-0.1.2测试项目,我使用以下插件(cordova plugin ls):

[ 'com.phonegap.plugins.PushPlugin',
  'org.apache.cordova.console',
  'org.apache.cordova.device',
  'org.apache.cordova.splashscreen' ]

我添加了像cordova plugin add org.apache.cordova.device这样的插件。在我的git repo中,我看到它将一堆文件添加到plugins/org.apache.cordova.device目录,在我的iOS插件目录中创建CDVDevice.hCDVDevice.m,更新{{1} },更新ios.json文件并将插件添加到*.xcodeproj内的config.xml

platforms/ios/test-app/config.xml

但是当我尝试访问JS中的<feature name="Device"> <param name="ios-package" value="CDVDevice" /> </feature> device属性时,它告诉我,window.device未定义。奇怪的是,pushPlugin存在:

device

document.addEventListener("deviceready", function () { console.log(device); console.log(window.device); console.log(window.plugins.pushNotification); }); 对象仅将window.plugins插件列为属性。这很奇怪,因为它们都安装了,在安装过程中,cordova说,一切都很好。

我有点困惑,关于过时的和混合的电话差距文档,但如果其中一个可行,那就没问题。我还在pushNotification这样的

中看到了一个插件定义
config.xml

有人可以解释一下,有什么不同之处?我用cordova 3.3工作的方式(<gap:plugin name="org.apache.cordova.device" /> )是不是已经过时了?当我尝试使用feature格式时,我的应用在启动时崩溃。

所以,请帮助我解决这个问题,并清除我的想法;)

4 个答案:

答案 0 :(得分:5)

不幸的是,没有一个答案奏效。幸运的是,我在这个邮件列表中找到了解决方案:

http://mail-archives.apache.org/mod_mbox/cordova-dev/201312.mbox/%3CCABiQX1Vat5XvmKkWt=+viL9oXWnOiAz5ee95h8oJp0j4MU9pJQ@mail.gmail.com%3E

他们说,这是cordova 3.3.1中的一个错误。在此版本中,插件将被复制到不同平台的.staging目录中。

因此,使用npm降级到cordova 3.3.0现在已经有效了(在Mac OS X上):

sudo npm remove -g cordova
sudo npm view cordova versions
sudo npm install -g cordova@3.3.0-rc.1

并检查,如果也可以从phonegap安装cordova。如果使用cordova,而不使用phonegap功能(如远程构建),则可以使用

安全地删除phonegap软件包
sudo npm remove -g phonegap

<强>更新

当前版本3.4.0运行正常,没有这个问题。

答案 1 :(得分:2)

使用gap:plugin

插件定义用于配置phonegap构建的插件(因此您不需要它用于本地构建)。


正如MBillau建议的那样,只有在您运行cordova prepare ios(或cordova build ios启动准备然后构建项目)后,插件才会添加到平台中。

运行prepare时,应将插件的javascript文件复制到www/plugins/pluginfullname/www的{​​{1}}文件夹中。

如果文件不存在,则可能是platforms/ios folder文件损坏的问题。在这种情况下,有时卸载然后重新安装插件可以解决问题。在某些情况下,您必须删除ios.json文件,并清空项目根目录下的plugins文件夹(也可能是平台文件夹)并重新安装所有插件。


如果window.plugins对象只列出了pushnotification插件,那只是因为它是这个对象中唯一安装的插件:

  • ios.json位于org.apache.cordova.consoleconsole
  • cordova.logger位于org.apache.cordova.device
  • window.device位于org.apache.cordova.splashscreen

要了解要使用的javascript对象名称,您必须阅读插件的文档或查看插件的navigator.splashscreen文件中的js-module / clobbers属性。

答案 2 :(得分:1)

从Cordova项目的根目录开始,进入./platforms/ios /

cd platforms/ios

在这里应该有一个./build文件夹 - 这包含以前构建的软件包,然后Cordova用于“延迟加载” - 即Cordova不一定要从各个位置获取文件,而是将它们存储在本地。但是,我发现这是有问题的。

删除此文件夹:

sudo rm -r build

离开后,重建您的Cordova项目:

cordova build

然后它应该重新创建构建文件夹,但更重要的是,您的插件将列在config.xml中。

答案 3 :(得分:0)

检查index.html文件是否具有正确的<script></script>行。

通过CLI创建新项目时出现问题。 index.html文件引用了phonegap.js而不是cordova.js