Cordova只在恢复事件后执行插件
Cordova only executes plugins after resume event
我在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版本。
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- bookmarklet中的jQuery.getScript()进行回调,但没有成功执行插件
- 使javascript在firefox中的插件javascript之后执行
- 如何在运行时添加的对象上执行Jquery插件
- JQuery:将参数传递给插件以限制代码执行
- Firefox 引导插件:安装事件未执行
- 使用位于插件文件夹内的参数执行二进制文件
- 编写jQuery插件,需要让页面知道代码已经执行
- jquery插件函数多次覆盖执行函数
- jQuery插件开发执行一个设置,这是一个函数
- 编写jquery插件,它没有执行
- 如何防止代码在 JQuery 插件完成保存 cookie 之前执行
- 在 AngularJS 渲染后执行一个 Jquery 插件
- 执行简单的JavaScript作为Chrome插件
- 为什么我的“;插件”;只执行一次
- Cordova插件的执行方法内部的AsyncTask工作不正常
- jasmine-maven插件:管理依赖关系和单独的规范执行
- Cordova只在恢复事件后执行插件
- 如何加载一个jquery插件,当一个对话框打开,然后执行插件
- 在浏览器启动时执行插件代码