web-dev-qa-db-fra.com

Cordova DeviceReady ne se déclenche pas

Je me tape la tête depuis quelques jours. Après avoir obtenu un certain nombre d'erreurs "objet non défini" lors de la tentative de création d'un nouvel objet FileTransfer (), il semble que le problème soit plus basique - en quelque sorte, l'événement DeviceReady ne se déclenche pas.

Stack Overflow a beaucoup de succès sur ce problème, mais la plupart d'entre eux ont à voir avec les versions cordova pré-3.x qui avaient une architecture différente (je suis sur 4.1.2). J'ai essayé les suggestions dans les sujets les plus récents que j'ai pu trouver - supprimer et ajouter des plugins, mettre à jour cordova, etc. - en vain. Pour essayer d'isoler le problème, j'ai commenté le code de démarrage en quelques lignes:

Index.html:

<!DOCTYPE html>
<html>
<head>
  <title>Blah</title>
  <meta charset="utf-8"/>
  <meta name="viewport" content="initial-scale=1, user-scalable=no, minimum-scale=1, maximum-scale=1">
  <link href="res/topcoat/css/topcoat-mobile-light.min.css" rel="stylesheet">
  <link href="res/css/styles.css" rel="stylesheet">
  <link href="res/css/pageslider.css" rel="stylesheet">
  <script data-main="js/main" src="lib/require.js"></script>
</head>

Main.js:

require(["app/Application"], function (Application) {
  "use strict";

  document.addEventListener("deviceready", function(){
      $('body').html("<p>device is ready</p>");
  },true);

  $('body').html("<p>waiting...</p>");
});

Au lieu d'afficher "l'appareil est prêt" dans le corps après un instant, l'écran affiche simplement "en attente ...". Cela se produit à la fois sur l'émulateur iOS et le navigateur (navigateur émulateur cordova).

Informations sur Cordoue:

$ cordova -v
4.1.2

Informations sur le plugin:

$ cordova plugins
org.Apache.cordova.globalization 0.3.3 "Globalization"

(J'obtiens les mêmes résultats si la mondialisation n'est pas là).

Y a-t-il un autre endroit où je devrais chercher? Je cours depuis la ligne de commande, si cela fait une différence.

23
eb1

Je pense que dans ce cas, vous devez inclure cordova.js dans votre candidature, car je ne vois pas cordova.js dans votre exemple

<script src="cordova.js"></script>

Remarque: chemin vers cordova.js dépend de son emplacement dans votre application

50
Alexander T.

Cela ne m'a pas arrangé au départ jusqu'à ce que je le retire

< meta http-equiv="Content-Security-Policy" content=".." / >
9
A. Soufi

J'ai récemment eu ce même problème, mais dans mon cas cordova.js était déjà correctement inclus.

Finalement, ce qui a fonctionné pour moi était un simple remove et add de la plate-forme ios:

cordova platform remove ios
cordova platform add ios

Cela faisait un bon moment que j'avais complètement reconstruit la plate-forme ios et d'autres changements majeurs avaient eu lieu pendant cette période (mise à niveau Cordova, mise à niveau XCode, etc.). Il est possible que mon config.xml ou la version existante de ios n'était pas conforme aux dernières exigences de Cordova.

1
Elliot B.