【问题标题】:deviceready only fire after 30 seconds in iOS 10在 iOS 10 中,deviceready 仅在 30 秒后触发
【发布时间】:2017-04-17 15:53:49
【问题描述】:

当我使用

在我的 iOS 设备上运行我的 ionic 应用程序时,我的 deviceready 不会触发或触发很晚
ionic run ios --device -lcs

我删除了所有带有ionic plugin rm ...的插件,删除了plugins/目录的内容并重新安装了它们。 我还用ionic platform rm/add ios删除并重新安装了ios平台。

我被这个困住了。

iPhone (6+) 运行 iOS 10。

我正在使用 ionic 1,以及最后一个 ionic CLI。

编辑:我一一删除了所有插件,看来问题是由于cordova-plugin-network-information和cordova-plugin-device造成的。

Process 663 detached
(lldb) 
(node:26790) DeprecationWarning: Using Buffer without `new` will soon stop working. Use `new Buffer()`, or preferably `Buffer.from()`, `Buffer.allocUnsafe()` or `Buffer.alloc()` instead.

14    030280   warn     Native: deviceready did not fire within 2000ms. This can happen when plugins are in an inconsistent state. Try removing plugins from plugins/ and reinstalling them.
15    030605   info     [object Object]
16    033286   log      deviceready has not fired after 5 seconds.
17    033290   log      Channel not fired: onCordovaInfoReady
18    033293   log      Channel not fired: onCordovaConnectionReady
19    363977   log      DEVICE READY FIRED AFTER, 32259, ms

我的 run.js、AppCtrl.js 和我的主视图的控制器被封装在 $ionicPlatform.ready(function () {..});`

我的内容安全政策是:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' *; connect-src 'self' 'unsafe-inline' 'unsafe-eval' blob: ws: *;">

【问题讨论】:

  • 请附上minimal reproducible example 来证明这一点。
  • 我添加了错误码
  • 但是我的应用有10多个插件,而且代码量很大!
  • 好的,如果我删除插件“cordova-plugin-network-information”,设备会在 1 秒后触发
  • 好的,我明白了,我也在做同样的事情,好的,我安装了所有插件,除了设备和网络信息....并且 deviceready 在 ios10 上不到一秒就触发了。也许离子有一个错误

标签: ios cordova ionic-framework device


【解决方案1】:

我补充说感谢您的回复@baviskarmitesh。但是我必须将gap 添加到内容安全策略中,现在它似乎可以工作了。

我在 index.html 文件的内容安全政策中添加了data: gap: https://ssl.gstatic.com 'unsafe-eval'default-src *,如下所示:

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

现在 deviceready 可以使用我的所有插件快速触发。

【讨论】:

  • 很高兴它成功了。正如我所提到的,这也与内容安全策略有关。
  • 它有所帮助,但我还必须删除 cordova-plugin-device 以便更快地触发 DeviceReady 事件。
【解决方案2】:

这似乎是 Ionic 框架的一个常见问题,可能有多种原因。一个原因可能是您使用的插件有问题,也可能是平台文件夹中的一些问题。 Ionic CLI 项目中似乎有一个open issue

以下可能是解决此问题的方法:

  1. 删除有问题的插件并重新添加
  2. 删除平台文件夹并重新添加。
  3. 可能避免使用实时重新加载选项
  4. 如果问题是特定于 iOS 的,那么您可以尝试放宽内容安全策略

你也可以看看这个link

希望这会有所帮助。

【讨论】:

  • 未解决的问题是关于人行横道的,我没有使用它。如果您阅读我的问题,则您的第 1 点和第 2 点无关紧要。 (我删除/添加了平台和插件)。您的最后一个链接也是如此。我编译了一个发布版本(没有 livereload),问题仍然存在。无论如何,我需要 livereload 来开发。您能否解释一下“放宽内容安全政策”是什么意思? (我在问题中添加了我的)。
  • @Louis 感谢 cmets。我重新检查了问题链接及其登录的 ionic CLI 项目。很少有人在使用人行横道时也遇到过同样的问题,但我觉得这个问题不仅限于人行横道。关于内容安全,请在 open issue 链接中查看 growthclick 的 cmets。还要注意 config.xml 中指定的访问源
猜你喜欢
  • 2015-02-23
  • 1970-01-01
  • 2016-03-29
  • 2015-12-16
  • 2014-08-28
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多