2017-08-22 2 views
3

Ich habe versucht, dies zuvor zu fragen, kaufen keine echte Antworten bekommen, und habe jetzt seit über einem Monat gekämpft.Ionic 3 Cordova Ajax Anrufe scheitern auf Windows 10 (UWP)

Ich kann meine Ajax-Anrufe nicht auf einer Ionic 3 Cordova-Anwendung ausführen, die für Windows 10 UWP erstellt wurde. Sie können auf localhost zugreifen, aber keine externen Verbindungen.

Die Anwendung funktioniert gut auf Android und iOS.

Ich versuche, dies lokal auf meinem Rechner zu testen. Ich benutze ein Zertifikat (gekauft), um die Anwendung zu signieren, installieren Sie dieses Zertifikat, erstellen Sie die Anwendung für Windows, und bin in der Lage zu öffnen CordovaApp.Windows10_1.0.1.1_x86.appxupload, und dann doppelklicken Sie auf die eingebettete CordovaApp.Windows10_1.0.1.1_x86.appx Datei zu installieren, die erfolgreich abgeschlossen wird. Die Installation zeigt an, dass die App einen Internetzugang benötigt.

Im config.xml, ich habe die folgenden Tags, wie an anderer Stelle vorgeschlagen ...

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

Allerdings, wenn ich laufe, der http.get Aufruf gibt nur 0 ohne weitere Informationen. Ich kann in Visual Studio ausführen, und schauen Sie sich das zurückgegebene Fehlerobjekt an, und erhalten Sie keine weiteren Informationen, abgesehen von dieser 0 Rückgabe.

I Fiedler ausgeführt haben, aktiviert das https-Entschlüsselung als here erklärt, aber alles, was ich in der Antwort-Header zu sehen ist

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

Das Ergebnis wird in der Hauptansicht tatsächlich 200 zeigt, so dass ich glaube nicht, das zeigt mir alles real.

Ich bin bei einem vollständigen Verlust. Ich habe nirgendwo mehr zu suchen. Was könnte ich vermissen?

Kann ich externe Ajax auf einem Windows 10-Computer verwenden, wenn ich die Anwendung wie hier side geladen habe? Ich habe noch nicht aus dem Laden versucht, da ich nicht hochladen will, bis ich weiß, dass es funktioniert.

Alle Vorschläge dringend begrüßt. Sicherlich hat jemand eine Ionic 3-Anwendung, die auf externe Ajax funktioniert, verwendet?

Vielen Dank im Voraus für jede Hilfe

[UPDATE 1]

Wenn ich die Anwendung auf der gleichen Maschine laufen, nur mit Ionic dienen (so läuft es nur im Browser eher gehostete als in die UWP), funktionieren die Ajax Calls auch gut.

[UPDATE 2]

Ich habe jetzt eine Cordova Anwendung mit dem Visual Studio-Vorlage erstellt, so dass alle anderen Frameworks aus der Gleichung nehmen.

I verwendet Vanille JavaScript meine Ruhe Aufruf zu tun ...

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); 
    } 
    } 
}; 

Ich laufe dies im Debugger, und auch hier bekomme ich einen Fehler (Statuscode 0) gewonnen.

Eine andere Sache, die ich bemerkt, wenn ich die Build-Paket öffnen und sehen Sie die cordova_plugins.js Datei ..

Meine Ionic App folgende ...

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 
    }); 

Jetzt hat, merke ich jedes Plugin in Die module.exports.metadata hat auch einen Eintrag in der module.exports EXCEPT für cordova-plugin-whitelist!

Wenn ich die gleiche Datei für die Anwendung in VS erstellt Corvoda öffnen, sehe ich die folgende ...

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 
    }); 

So hat dies nichts anderes für die Whitelist-Plugin als auch

Könnte es sein etwas fehlt hier ?? Kann dieses Whitelist-Plugin nicht korrekt installiert werden?

+0

Nach einer langen Zeit, habe ich getan, was ich sollte schon lange vorher, und testete die Anwendung in einem anderen Netzwerk, und es hat gut funktioniert. Von zu Hause aus, oder wenn das Gerät an das Mobilfunknetz angebunden ist, keine Probleme. Nur Probleme sind im Arbeitsnetzwerk. Da dies ein bisschen anders ist, habe ich ein separates [post] erstellt (https://stackoverflow.com/questions/46480462/how-to-troubleshoot-local-windows-uwp-cordova-networking-issues) für diese " neues "Problem, das eher im Zusammenhang mit der Instrafruktur im Gegensatz zu App – peterc

Antwort

0

Ich hatte eine ähnliche Situation, in der meine Ajax-Anrufe in TEST gut funktionierten, aber wenn ich zu PROD wechselte, würden sie scheitern.

Die Antwort wurde schließlich als fehlendes Zwischenzertifikat auf dem Server gefunden, auf den ich zugreifen wollte. TEST hatte das Zertifikat, PROD nicht.

Ich hoffe, das hilft.

+0

sein kann Danke dafür. nicht sicher, welches Zertifikat du hier meinst? Ich bin mir sicher, dass mein Problem auf dem lokalen Clientcomputer liegt, da die Anfrage anscheinend nie auf den Server gelangt (ich sehe es nicht einmal in Wireshark). Mein Problem sieht jetzt so aus, als könnte es das spezifische Netzwerk sein, auf dem ich gerade teste, also habe ich dieses [post] (https://stackoverflow.com/questions/46480462/how-to-troubleshoot-local-windows-uwp-cordova- Netzwerk-Probleme) für das Problem. – peterc

+0

Mein Ajax versuchte auf https://www.someserver.net zuzugreifen und der Rechner, auf dem someserver.net lief, hatte ein SSL-Zertifikat, aber ein Zertifikat in der Zertifikatskette des SSL-Zertifikats fehlte. Insbesondere war es eine NetScaler-Instanz, bei der das Zwischenzertifikat fehlte. – Diff

+0

Wenn ich mich richtig erinnere, als wir Wireshark ausprobiert haben, ist der Datenverkehr nie auf someserver.net gelaufen, sondern auf der NetScaler-Instanz. – Diff