2017-08-22 3 views
3

J'ai essayé de demander cela précédemment, acheter n'a pas de vraies réponses, et ont maintenant été en difficulté depuis plus d'un mois.Ionic 3 appels Cordova ajax échouer sur Windows 10 (UWP)

Je ne parviens tout simplement pas à faire fonctionner mes appels ajax sur une application Ionic 3 Cordova conçue pour Windows 10 UWP. Ils peuvent accéder à localhost, mais pas à des connexions externes.

L'application fonctionne correctement sur Android et iOS. J'essaye de tester ceci localement sur ma machine de dev. J'utilise un certificat (acheté) pour signer l'application, installer ce certificat, construire l'application pour Windows, et suis capable d'ouvrir le CordovaApp.Windows10_1.0.1.1_x86.appxupload construit, puis double-cliquez sur le fichier CordovaApp.Windows10_1.0.1.1_x86.appx à installer, qui se termine avec succès. L'installation indique que l'application a besoin d'un accès Internet.

Dans le config.xml, je les balises suivantes, comme suggéré ailleurs ...

<allow-navigation href="*" /> 
<access origin="*" /> 

Cependant, quand je lance, l'appel http.get retourne juste 0 sans autre information. Je peux courir dans Visual Studio, et regarder l'objet d'erreur retourné, et obtenir aucune autre information, à part ce retour 0.

J'ai couru Fiddler, a permis le déchiffrement https comme expliqué here, mais tout ce que je vois dans l'en-tête de réponse est

HTTP/1.0 200 Connection Established 
FiddlerGateway: Direct 
StartTime: 13:44:21.686 
Connection: close 

Le résultat dans la vue principale montre en fait 200, donc je ne pense pas est de me montrer quelque chose de réel.

Je suis complètement perdu. Je n'ai pas d'autre endroit où chercher. Que pourrais-je manquer? Dois-je être en mesure d'utiliser ajax externe sur un ordinateur Windows 10, lorsque j'ai téléchargé l'application comme ici? Je n'ai pas encore essayé du magasin, car je ne veux pas télécharger jusqu'à ce que je sais que cela fonctionne.

Toutes les suggestions désespérément bien accueillies. Sûrement quelqu'un a eu une application Ionic 3 accédant à un travail ajax externe?

Merci à l'avance pour toute aide

[UPDATE 1]

Si je lance l'application sur la même machine, juste en utilisant ionique servir (il fonctionne seulement dans le navigateur plutôt que hébergé dans l'UWP), les appels ajax fonctionnent également bien.

[UPDATE 2]

J'ai maintenant créé une application Cordova en utilisant le modèle Visual Studio, afin de prendre toutes les autres cadres de l'équation.

je JavaScript vanille pour faire mon appel de repos ...

document.addEventListener('deviceready', callUrl, false); 

function callUrl() { 

    console.log('callUrl'); 
    var xhr = new XMLHttpRequest(); 
    xhr.open('GET', 'https://myserveraddress.com/myapp/testroute'); 
    xhr.send(null); 

    xhr.onreadystatechange = function() { 
    var DONE = 4; // readyState 4 means the request is done. 
    var OK = 200; // status 200 is a successful return. 
    if (xhr.readyState === DONE) { 
     if (xhr.status === OK) 
     console.log(xhr.responseText); 
    } else { 
     console.log('Error: ' + xhr.status); 
    } 
    } 
}; 

je lance ce dans le débogueur, et même ici, je reçois une erreur (code d'état 0).

Une autre chose que je remarque quand j'ouvre le paquet build et regardez le fichier cordova_plugins.js ..

Mon ionique app a ce qui suit ...

cordova.define('cordova/plugin_list', function(require, exports, module) { 
    module.exports = [ 
     { 
      "id": "cordova-plugin-console.logger", 
      "file": "plugins/cordova-plugin-console/www/logger.js", 
      "pluginId": "cordova-plugin-console", 
      "clobbers": [ 
       "cordova.logger" 
      ] 
     }, 
     { 
      "id": "cordova-plugin-console.console", 
      "file": "plugins/cordova-plugin-console/www/console-via-logger.js", 
      "pluginId": "cordova-plugin-console", 
      "clobbers": [ 
       "console" 
      ] 
     }, 
     { 
      "id": "cordova-plugin-device.device", 
      "file": "plugins/cordova-plugin-device/www/device.js", 
      "pluginId": "cordova-plugin-device", 
      "clobbers": [ 
       "device" 
      ] 
     }, 
     { 
      "id": "cordova-plugin-device.DeviceProxy", 
      "file": "plugins/cordova-plugin-device/src/windows/DeviceProxy.js", 
      "pluginId": "cordova-plugin-device", 
      "merges": [ 
       "" 
      ] 
     }, 
     { 
      "id": "cordova-plugin-splashscreen.SplashScreen", 
      "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js", 
      "pluginId": "cordova-plugin-splashscreen", 
      "clobbers": [ 
       "navigator.splashscreen" 
      ] 
     }, 
     { 
      "id": "cordova-plugin-splashscreen.SplashScreenProxy", 
      "file": "plugins/cordova-plugin-splashscreen/www/windows/SplashScreenProxy.js", 
      "pluginId": "cordova-plugin-splashscreen", 
      "runs": true 
     }, 
     { 
      "id": "cordova-plugin-statusbar.statusbar", 
      "file": "plugins/cordova-plugin-statusbar/www/statusbar.js", 
      "pluginId": "cordova-plugin-statusbar", 
      "clobbers": [ 
       "window.StatusBar" 
      ] 
     }, 
     { 
      "id": "cordova-plugin-statusbar.StatusBarProxy", 
      "file": "plugins/cordova-plugin-statusbar/src/windows/StatusBarProxy.js", 
      "pluginId": "cordova-plugin-statusbar", 
      "runs": true 
     }, 
     { 
      "id": "ionic-plugin-keyboard.KeyboardProxy", 
      "file": "plugins/ionic-plugin-keyboard/src/windows/KeyboardProxy.js", 
      "pluginId": "ionic-plugin-keyboard", 
      "clobbers": [ 
       "cordova.plugins.Keyboard" 
      ], 
      "runs": true 
     } 
    ]; 
    module.exports.metadata = 
    // TOP OF METADATA 
    { 
     "cordova-plugin-console": "1.0.5", 
     "cordova-plugin-device": "1.1.4", 
     "cordova-plugin-splashscreen": "4.0.3", 
     "cordova-plugin-statusbar": "2.2.2", 
     "cordova-plugin-whitelist": "1.3.1", 
     "ionic-plugin-keyboard": "2.2.1" 
    }; 
    // BOTTOM OF METADATA 
    }); 

Maintenant, je remarque tous les plug-in dans le module.exports.metadata a également une entrée dans le module.exports SAUF pour cordova-plugin-whitelist!

Si j'ouvre le même dossier pour l'application Corvoda créée en VS, je vois ce qui suit ...

cordova.define('cordova/plugin_list', function(require, exports, module) { 
    module.exports = []; 
    module.exports.metadata = 
    // TOP OF METADATA 
    { 
     "cordova-plugin-whitelist": "1.2.2" 
    }; 
    // BOTTOM OF METADATA 
    }); 

Donc, cela n'a rien d'autre pour le plug-in whitelist ainsi

Y aurait-il quelque chose manque ici? Ce plugin de liste blanche ne peut-il pas être installé correctement?

+0

Après un long moment, j'ai fait ce que je devrais avoir longtemps avant, et testé l'application sur un autre réseau, et, ça a bien fonctionné. De chez moi, ou si l'appareil est connecté au réseau cellulaire, pas de problème. Seuls les problèmes sont sur le réseau de travail. Comme c'est un peu différent, j'ai créé un [post] séparé (https://stackoverflow.com/questions/46480462/how-to-troubleshoot-local-windows-uwp-cordova-networking-issues) pour cela " nouveau "problème, qui peut être plus lié à l'instrafructure par opposition à l'application – peterc

Répondre

0

J'ai eu une situation similaire où mes appels ajax ont bien fonctionné dans TEST, mais quand je suis passé à PROD, ils échoueraient.

La réponse a finalement été identifiée comme un certificat d'intermédiaire manquant sur le serveur auquel j'essayais d'accéder. TEST avait le cert, PROD n'a pas.

J'espère que cela aide.

+0

Merci pour cela. Vous ne savez pas quel certificat vous voulez dire ici? Je suis sûr que mon problème est sur la machine client locale car la requête ne semble jamais parvenir au serveur (je ne la vois même pas dans Wireshark). Mon problème semble maintenant être le réseau spécifique sur lequel je suis en train de tester, donc j'ai ajouté ceci [post] (https://stackoverflow.com/questions/46480462/how-to-troubleshoot-local-windows-uwp-cordova- problèmes de mise en réseau) pour le problème. – peterc

+0

Mon ajax essayait d'accéder à https://www.someserver.net et la machine exécutant someserver.net avait un cert ssl, mais un certificat avant dans la chaîne de certificat du cert de ssl était manquant. Plus précisément, il s'agissait d'une instance NetScaler qui manquait le certificat intermédiaire. – Diff

+0

Si je me souviens bien, quand nous avons essayé Wireshark, le trafic ne l'a jamais fait sur someserver.net, mais s'est arrêté sur l'instance de NetScaler. – Diff