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

Cordova only executes plugins after resume event

本文关键字:执行 插件 事件 恢复 Cordova      更新时间:2023-09-26

我在iOS上使用Cordova 3.5.0。

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

当我回到我的应用程序时,'resume'处理程序被触发,日志显示在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"

我在自己的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- barcodesscanner, cordova-plugin- dialogues。其他插件,如cordova-plugin-file-transfer,也可以正常工作。

Tom,虽然不是真正的答案,因为我不确定是什么修复了它,我可以确认我的应用程序不再这样做。我是这样做的:

更改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版本。