【问题标题】:Cordova only executes plugins after resume eventCordova 仅在恢复事件后执行插件
【发布时间】:2014-07-28 13:15:40
【问题描述】:

我在 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"

提前致谢。

【问题讨论】:

  • 嗨 - 我和你有同样的问题。它适用于Android,但不适用于iOS。在应用程序进入睡眠状态然后恢复之前,即使是警报也不会触发。你知道发生了什么吗?非常感谢。
  • 不,我仍然不知道为什么会发生这种情况......
  • 你解决过这个问题吗?

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


【解决方案1】:

我在自己的应用程序中遇到了与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 插件代码。 但我仍然觉得奇怪的是,该政策受到恢复应用的影响。

附加说明:该问题似乎影响了在 web 视图之外显示的所有插件。我使用了 cordova-plugin-camera、phonegap-plugin-barcodescanner、cordova-plugin-dialogs。其他插件,如 cordova-plugin-file-transfer 工作得很好。

【讨论】:

  • 在一个使用状态栏的小型手机项目上工作,它只是不会在第一次运行应用程序时显示,但在恢复时会显示。这个 CSP 修复了它。
【解决方案2】:

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 版本更容易的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 2017-03-19
    相关资源
    最近更新 更多