J'ai commencé à déboguer en travaillant avec des données persistantes pendant des semaines ... et je pense que j'ai finalement trouvé * une partie du problème.L'événement Cordova filePluginIsReady ne se déclenche jamais sous iOS en utilisant le fichier cordova-plugin
La plupart de mes tests exécutent la plate-forme du navigateur dans Chrome 59 sur Windows 10, mais je construis également mon application avec Phonegap Build, et je l'installe sur mon iPhone (iOS 10.3.2).
Selon le Cordova doc's Chrome querks:
Chrome filesystem is not immediately ready after device ready event. As a workaround you can subscribe to filePluginIsReady event. Example:
window.addEventListener('filePluginIsReady', function(){ console.log('File plugin is ready');}, false);
You can use
window.isFilePluginReadyRaised
function to check whether event was already raised.
je n'étais pas en mesure d'obtenir l'écouteur d'événement « filePluginIsReady » de travail, donc finalement essayé console.logging window.isFilePluginReadyRaised
, et bien sûr, il est faux!
En désespoir de cause, j'ai essayé d'ajouter une minuterie
setTimeout(function(){
console.log('filePluginIsReady: ' + window.isFilePluginReadyRaised());
consol.append(document.createElement("br"));
consol.append('filePluginIsReady: ', window.isFilePluginReadyRaised());
}, 5000);
Et je reçois vrai! J'ai essayé de l'abaisser à 1000ms et cela fonctionne toujours, mais sans le temps mort, je deviens faux. J'ajoute le journal de la console à un élément dom pour que je puisse déboguer cela sur mon téléphone, ce qui m'amène au problème: je n'ai rien ...
Je reçois le beau vert "l'appareil est prêt", mais après cinq secondes, ma "console" reste vide. Aucun résultat de window.isFilePluginReadyRaised()
Mon HTML
<div class="app">
<h1>Apache Cordova</h1>
<div id="deviceready" class="blink">
<p class="event listening">Connecting to Device</p>
<p class="event received">Device is Ready</p>
</div>
<h3>Console:</h3>
<pre id='consol'></pre>
</div>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="dist/build.js"></script>
JS
var app = {
initialize: function() {
document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
},
onDeviceReady: function() {
this.receivedEvent('deviceready');
setTimeout(function(){
console.log(cordova.file);
console.log('filePluginIsReady: ' + window.isFilePluginReadyRaised());
consol.append(document.createElement("br"));
consol.append('filePluginIsReady: ', window.isFilePluginReadyRaised());
}, 5000);
},
receivedEvent: function (id) {
var parentElement = document.getElementById(id);
var listeningElement = parentElement.querySelector('.listening');
var receivedElement = parentElement.querySelector('.received');
listeningElement.setAttribute('style', 'display:none;');
receivedElement.setAttribute('style', 'display:block;');
console.log('Received Event: ' + id);
},
};
app.initialize();
config.xml
<?xml version='1.0' encoding='utf-8'?>
<widget id="io.cordova.hellocordova" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>HelloCordova</name>
<description>
A sample Apache Cordova application that responds to the deviceready event.
</description>
<author email="[email protected]" href="http://cordova.io">
Apache Cordova Team
</author>
<content src="index.html" />
<preference name="iosPersistentFileLocation" value="Library" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<allow-intent href="market:*" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
</platform>
<engine name="browser" spec="^4.1.0" />
<plugin name="cordova-plugin-file" spec="^4.3.3" />
<plugin name="cordova-plugin-whitelist" spec="^1.3.2" />
</widget>
Edit: Je découvre ma structure de fichier peut avoir été incorrect. Phonegap spécifie que la config devrait être dans le répertoire www, alors que le mien était de niveau supérieur. Corriger cela n'a pas résolu le problème. J'ai aussi vérifié le Phonegap journaux de construction:
--------------------------------------------------------------------------------
PLUGIN OUTPUT
--------------------------------------------------------------------------------
Fetching plugin "[email protected]^4.3.3" via npm
Installing "cordova-plugin-file" at "4.3.3" for ios
Fetching plugin "cordova-plugin-compat" via npm
Installing "cordova-plugin-compat" at "1.1.0" for ios
Fetching plugin "[email protected]^1.3.2" via npm
Installing "cordova-plugin-whitelist" at "1.3.2" for ios
Merci pour la réponse, comment éviterais-je 'Uncaught ReferenceError: l'application n'est pas définie'? – Chase
Mis à jour ma réponse - essayez-le. Les plugins peuvent être difficiles à travailler, pour être honnête. Il pourrait y avoir un problème entièrement différent. essayez également de déboguer en utilisant votre Mac et iPhone: http://phonegap-tips.com/articles/debugging-ios-phonegap-apps-with-safaris-web-inspector.html – dotNetkow
Toujours seulement voir onDeviceReady connecté (Windows 10/FF & Chrome). Je suis seulement sur Windows alors j'ai des options de débogage iOS limitées. Mais même avec mon truc d'injecter quelque chose dans un élément dom pour truquer un journal de console, deviceReady se déclenche mais pas filePluginReady. Tu as raison, les plugins semblent difficiles ...J'essayais de travailler avec un test super réduit, mais quelqu'un d'autre a eu le gestionnaire de données que j'utilise pour travailler sur deviceReady. Donc je suppose que le plugin de fichier est prêt, même si je ne peux pas le tester ... Donc ce n'est plus une priorité, mais toujours concernant :(Merci d'avoir pris un coup de main! – Chase