我有一个适用于 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
添加了一堆文件目录,创建一个 CDVDevice.h
和一个 CDVDevice.m
在我的 iOS 插件目录中,更新 ios.json
, 更新 *.xcodeproj
文件并将插件添加到我的 config.xml
里面platforms/ios/test-app/config.xml
:
<feature name="Device">
<param name="ios-package" value="CDVDevice" />
</feature>
但是当我尝试访问 device
或 window.device
JS 中的属性,它告诉我,device
未定义。奇怪的是,存在 pushPlugin:
document.addEventListener("deviceready", function () {
console.log(device);
console.log(window.device);
console.log(window.plugins.pushNotification);
});
window.plugins
对象仅列出 pushNotification
插件作为属性。很奇怪,因为都安装好了,安装的时候,cordova说,一切正常。
对于过时的和混合了 phonegap 的文档,我有点困惑,但如果其中一个可以工作,那也没关系。我还看到了一个插件定义,在 config.xml
中像这样
<gap:plugin name="org.apache.cordova.device" />
谁能解释一下,有什么区别?我使用 cordova 3.3 的方式(使用 feature
)是否过时了?当我尝试使用 <gap:plugin...
格式,我的应用程序在启动时崩溃。
所以,请帮我解决这个问题,让我头脑清醒 ;)
最佳答案
不幸的是,没有一个答案有效。幸运的是,我在这个邮件列表中找到了解决方案:
他们说,这是 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版本运行良好,没有这个问题。
关于android - Cordova 3.3.1-0.1.2 (Phonegap) 插件不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21388709/