【问题标题】:Cordova deviceready not firing in iOS until interacting with iOSCordova 设备在与 iOS 交互之前不会在 iOS 中触发
【发布时间】:2015-09-04 06:43:48
【问题描述】:

我有一个非常奇怪的错误,在用户与操作系统本身交互之前,设备就绪事件不会在 iOS 设备中触发,即按下前按钮,向下拖动显示通知中心或向上拖动进入设备设置.

当用户开始拖动 iOS 通知中心时,设备准备就绪。

像这样简单的事情是行不通的:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width" />
  <meta http-equiv="Content-Security-Policy" content="default-src 'self' data:* gap:* tel:* 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" />

  <title></title>

  <!-- cordova script (this will be a 404 during development) -->
  <script src="cordova.js"></script>
</head>

<body>
  <div id="log"></div>

  <script type="text/javascript">
    var log = document.getElementById("log");
    if(window.cordova){
        log.innerHTML = "with cordova";
        document.addEventListener("deviceready", function onDeviceReady(){
            log.innerHTML = "deviceready";
        }, false);
    }else{
        log.innerHTML = "with browser";
    }
  </script>
</body>
</html>

【问题讨论】:

    标签: cordova content-security-policy cordova-ios


    【解决方案1】:

    我在 iOS 上遇到了同样的问题。最后,这两种解决方法中的任何一种都适用于

    1. &lt;meta http-equiv="Content-Security-Policy".......&gt; 添加到索引。

    2. 将平台降级到 4.0.0(Cordova 平台更新 iOS@4.0.0)

    执行第一个选项更可取,因为降级到 4.0.0 可能不适合您。

    【讨论】:

    • 问题的根源在于您必须在内容安全策略中将gap://* 列入白名单。降级到 4.0.0 是可行的,因为白名单是以另一种已弃用的方式管理的。
    • 我正在使用适用于 iOS 的 Cordova 4.4.0。我尝试为 content-security-policy 添加元数据并将其删除。它在加载期间不会调用。相反,如果我按下主页按钮,它就会触发。同一个项目,它适用于其他html。只有特定的 html 不起作用。请参考我的问题 - [链接] stackoverflow.com/questions/47076208/… 非常感谢任何帮助。
    【解决方案2】:

    这个问题真的很微妙。我花了大约 4 小时调试 iOS,为什么 cordova 没有触发,直到我看到我错过了两个 //,就在这里:

      <meta http-equiv="Content-Security-Policy" content="default-src 'self' data:* gap://* tel:* 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" />
    

    那个小的gapin Content-Security-Policy 必须在前面有两个//才能工作。这解决了我的错误,我仍然不明白为什么.-.

    希望这会有所帮助!

    【讨论】:

    • 哇!你拯救了我的一天......你在哪里找到它!你能得到更多关于相同的文档吗?
    • @MalaySarkar 不,我不知道为什么。至于我是如何发现的,在最后的 4 小时调试中,我将我的非工作应用程序减少到我在上面的代码(问题部分)中拥有的内容,并尝试将它与一个新的 Cordova 应用程序进行比较,其中包含一些启动种子有这个 Content-Security-Plolicy 标签。至于关于这个标签的其他文档,这里有一个完整的答案stackoverflow.com/questions/30280370/…
    • 我只是错过了完整的gap://* 部分。现在一切正常,非常感谢!
    • 如果有人想知道,截至 2018 年 8 月,仍然是一个有效的解决方案 - 救了我的培根,非常感谢!
    • 只有gap: 为我做了这件事。但我意识到只有data-src * 甚至不起作用。
    猜你喜欢
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 2023-02-05
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    相关资源
    最近更新 更多