Устройство Cordova не срабатывает в iOS, пока не взаимодействует с iOS

У меня была действительно странная ошибка, из-за которой событие deviceready не срабатывало на устройстве 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>

person olivarra1    schedule 18.06.2015    source источник


Ответы (2)


Проблема была действительно тонкой. Я потратил около 4 часов на отладку iOS, почему кордова не срабатывала, пока не увидел, что мне не хватает двух //, прямо здесь:

  <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 должна была иметь два //in впереди, чтобы она работала. Это решило мою ошибку, я до сих пор не понимаю, почему.-.

Надеюсь это поможет!

person olivarra1    schedule 18.06.2015
comment
Ух ты! Вы спасли мой день... Где вы его нашли! Можете ли вы получить больше документации о том же самом? - person Malay Sarkar; 10.11.2016
comment
@MalaySarkar Нет, я не знал почему. Что касается того, как я это обнаружил, с этими 4 часами отладки в конце я уменьшил свое неработающее приложение до того, что у меня есть в коде выше (раздел вопросов), и попытался сравнить его с новым приложением Cordova с некоторым начальным семенем, которое имел этот тег Content-Security-Plolicy. Что касается дополнительной документации об этом теге, вот полный ответ stackoverflow.com/questions/30280370/ - person olivarra1; 10.11.2016
comment
Мне просто не хватало полной части gap://*. Теперь все работает! Большое спасибо! - person Barry Kooij; 21.04.2017
comment
Все еще решение, которое работает по состоянию на август 2018 года, если кому-то интересно - спас мой бекон, большое спасибо! - person P110; 18.08.2018
comment
Только gap: сделал это за меня. Но я понял, что только data-src * даже не работает. - person smonkey; 15.03.2019

У меня была такая же проблема на iOS. Наконец, любой из этих двух обходных путей работал для

  1. Добавьте <meta http-equiv="Content-Security-Policy".......> к индексу.

  2. Понизить платформу до 4.0.0 (обновление платформы Cordova [email protected])

Выполнение первого варианта предпочтительнее, так как понижение до 4.0.0, вероятно, не является для вас предпочтительным.

person Shraavan Hebbar    schedule 25.12.2016
comment
Источником проблемы является то, что вы должны внести gap://* в белый список в своей политике безопасности контента. Переход на версию 4.0.0 работает, потому что белый список управляется другим устаревшим способом. - person olivarra1; 27.12.2016
comment
Я использую Cordova 4.4.0 для iOS. Я попытался добавить мета для политики безопасности контента, а также удалить его. Во время загрузки не звонит. Вместо этого, если я нажму кнопку «Домой», он сработает. Тот же проект, он работает для другого html. Не работает только определенный html. Пожалуйста, обратитесь к моему вопросу - [ссылка] stackoverflow.com/questions/47076208/ Любая помощь очень ценится. - person nOOb iOS; 06.11.2017