Устройството 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 защо cordova не задейства, докато не видях, че просто ми липсват две //, точно тук:

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

този малък gapв Content-Security-Policy трябваше да има два //отпред, за да работи. Това разреши грешката ми, все още не разбирам защо .-.

Надявам се това да помогне!

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