Cordova仅在恢复事件后执行插件

时间:2014-07-28 13:15:41

标签: javascript ios cordova phonegap-plugins phonegap-pushplugin

我在iOS上使用Cordova 3.5.0。

我的应用程序已加载,' deviceReady'事件被触发,但直到我将我的应用程序放在后台(通过进入主屏幕)才会执行插件操作。

当我回到我的应用程序时,'恢复'处理程序被触发,日志显示在LLDB中,PushNotification插件开始侦听事件并尝试注册推送通知。

为什么只有在我的应用程序进入睡眠状态后才会发生这种情况?

这些是已安装的插件(cordova plugins ls):

com.patrickheneise.cordova.statusbar 0.0.2 "Status Bar"
com.phonegap.plugins.PushPlugin 2.2.1 "PushPlugin"
com.phonegap.plugins.actionsheet 1.0.0 "ActionSheet"
org.apache.cordova.console 0.2.10-dev "Console"
org.apache.cordova.dialogs 0.2.9-dev "Notification"
org.apache.cordova.vibration 0.3.10-dev "Vibration"

提前致谢。

2 个答案:

答案 0 :(得分:5)

我在cordova 6.3.0的应用中遇到了同样的问题。 经过几十次测试后我发现了问题。

我有一个Content-Security-Policy元标记定义如下:

<meta http-equiv="Content-Security-Policy" content="default-src *;
      style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 
     'unsafe-eval'; media-src *">

事实证明default-src *还不够。

使用以下政策:

 <meta http-equiv="Content-Security-Policy" content="default-src *
       'self' data: gap:  https://ssl.gstatic.com; style-src 'self' 'unsafe-inline';
       script-src 'self' 'unsafe-inline' 'unsafe-eval'; media-src *">

此处的关键部分是gap:

似乎需要在iOS上正确执行cordova插件代码。 但我仍然觉得这个政策受到恢复应用程序的影响很奇怪。

附加说明:问题似乎会影响在webview外部显示的所有插件。我用cordova-plugin-camera,phonegap-plugin-barcodescanner,cordova-plugin-dialogs。其他插件如cordova-plugin-file-transfer工作得很好。

答案 1 :(得分:0)

汤姆,虽然不是真的答案,因为我不知道是什么修复它,我可以确认我的应用程序不再这样做了。这就是我所做的:

更改了cordova以使用3.3.0代替3.4.0,同时为我的插件指定了版本号:

<gap:plugin name="org.apache.cordova.console" version="0.2.7" />
<gap:plugin name="org.apache.cordova.contacts" version="0.2.11" />
<gap:plugin name="org.apache.cordova.device" version="0.2.8" />
<gap:plugin name="org.apache.cordova.device-orientation" version="0.3.5" />
<gap:plugin name="org.apache.cordova.dialogs" version="0.2.6" />
<gap:plugin name="org.apache.cordova.file" version="1.0.1" />
<gap:plugin name="org.apache.cordova.file-transfer" version="0.4.2" />
<gap:plugin name="org.apache.cordova.network-information" version="0.2.7" />
<gap:plugin name="org.apache.cordova.vibration" version="0.3.7" />

然后我重新构建了我的应用程序,它在iOS上运行正常。所以我然后将Cordova升级到3.4.0,使插件保持不变,它仍然有效。

所以我不知道这是因为旧的插件版本还是因为我只是降级然后升级了Cordova,但它现在已经修复了它。

哦,是的,我正在使用Phonegap Build,这就是为什么它更容易降低/升级Phonegap / Cordova版本。