web-dev-qa-db-fra.com

À quoi sert le fichier cordova_plugins.json? Cordova le demande à l'initialisation

J'essaie de déboguer à quoi sert le fichier cordova_plugins.json?

J'utilise plusieurs plugins jusqu'à présent et je n'ai jamais interagi avec ce fichier. Je veux comprendre pourquoi cordova fait une demande xhr pour ce fichier lors de l'initialisation.

Lorsque je regarde ma console, je continue de voir cette erreur 404 chaque fois que je teste mon application dans Chrome et j'aime comprendre pourquoi ce fichier est nécessaire.

33
Eric H

Cela ressemble à une fonctionnalité introduite dans Cordova 2.6.0, au moins je viens de le remarquer dans cette version. À ce stade, je n'ai trouvé aucune documentation et je n'ai pas beaucoup de détails à ce sujet, mais pour l'instant, j'ai résolu le problème 404 en ajoutant un fichier factice cordova_plugins.json à la racine de mon projet.

Comme il attend un fichier json valide, j'ai ajouté le contenu suivant au fichier: "juste un fichier factice requis par Cordova 2.6.0"

14
Felipe Plets

Il semble que ce soit un problème connu comme discuté: ici

La création d'un fichier json factice n'a pas résolu le problème pour moi ... En effet, supprimez tout ce morceau de code à la fin de cordova-2.7.0.js

// Try to XHR the cordova_plugins.json file asynchronously.
try { // we commented we were going to try, so let us actually try and catch
    var xhr = new context.XMLHttpRequest();
    xhr.onload = function() {
        // If the response is a JSON string which composes an array, call handlePluginsObject.
        // If the request fails, or the response is not a JSON array, just call finishPluginLoading.
        var obj = this.responseText && JSON.parse(this.responseText);
        if (obj && obj instanceof Array && obj.length > 0) {
            handlePluginsObject(obj);
        } else {
            finishPluginLoading();
        }
    };
    xhr.onerror = function() {
        finishPluginLoading();
    };
    xhr.open('GET', 'cordova_plugins.json', true); // Async
    xhr.send();
}
catch(err){
    finishPluginLoading();
}

et le remplacer par un appel à finishPluginLoading () résoudra le problème.

11

Filip Maj d'Adobe a déclaré ailleurs que cela était dû (jusqu'à présent) à un outillage de plug-in partiellement implémenté. Dans les futures versions de Cordova, l'outillage du plugin générera lui-même cordova_plugins.json.

Pour l'instant, il a dit qu'il était prudent d'ignorer complètement l'erreur 404. Si vous pensez que cela affecte votre application, vous devez signaler un bogue avec Cordova.

[Notez que si vous ajoutez vous-même un fichier factice, cela peut affecter l'intégration des plugins]

9
Black

je confirme la réponse de francis et je noterais que sur 2.7 si un fichier factice est inséré, parfois il démarre une boucle infinie sur l'erreur "processMessage a échoué: message invalide:" (ligne cordova-2.7.0.js: 971). conserver l'erreur 404 semble en effet plus sûr. (réf: https://groups.google.com/forum/?fromgroups#!topic/phonegap/slbvvtEw0aw )

6
netalex

Ce fichier représentait un bogue/fin lâche dans les versions précédentes de Cordova/PhoneGap - et le correctif suggéré par nurieta a résolu l'erreur (inoffensive) levée en son absence. Le successeur de ce fichier est maintenant créé et géré par la Cordova/PhoneGap CLI entièrement et réside dans /myapp/platforms/#platform#/www/cordova_plugins.js

Conclusion - bien que le fichier sorta existe toujours, ce n'est plus un problème depuis Cordova 3.0.

2
Chris Emerson

En fait, je me moque de ce fichier en tant que fichier json vide dont le contenu est: "{}" et -en utilisant cordova 2.6- qui semble résoudre les problèmes. Il n'y avait pas de laid 404 et Cordova semblait bien fonctionner.

Edit: Vous pouvez supprimer le code qui fait la demande ajax tous ensemble de cordova et les choses fonctionneraient très bien.

1
nurieta

Vous pouvez en savoir plus ici .

L'emplacement dans le SDK/XDK est comme: xdk-new\xdk\components\server\emulator\resources\cordova_plugins.json

0
Sascha Wedler