webentwicklung-frage-antwort-db.com.de

Ionic-Anfragen geben 404 nur auf Android zurück, in Chrome funktioniert das einwandfrei

Also, ich habe das Tutorial App Repo von Ionic geklont. ich rannte

ionic start conference sidemenu

und dann habe ich ein einfaches $ http.get ('myserver') hinzugefügt (ich habe es auch mit ngResources versucht). 

Es hat perfekt auf Chrome funktioniert, ich habe alle Daten zurückbekommen, aber bei Winkel habe ich nur Nulldaten und den Status 404 für jede Anfrage erhalten, die ich versucht habe.

Hinweis: Ich habe es mit meinem gehosteten Server und mit einem lokalen Server versucht. Beide scheitern an Android. Server ist eine node.js REST - API.

Auf der Konsole wird nichts gedruckt, sodass die Anforderung nicht einmal an den Server gelangt.

Hat jemand das erlebt oder könnte mir sagen, wie ich mit Ionic erstellte Android-Apps debuggen kann?

EDIT 1: Ich weiß nicht, warum Sie es brauchen, aber hier ist es

$http.get('http://server.com/route').success(function (data) {
            //handle success
        }).error(function (data, status) {
            // handle error
        });
39
Victor Balan

In Cordova 4.0.0 gab es einige wichtige Änderungen:

Wesentliche Änderungen [...] - Die Whitelist-Funktion wird jetzt über das Plugin (CB-7747) bereitgestellt. Die Die Whitelist wurde verbessert, um sicherer und konfigurierbarer zu sein Die Einstellung von Content-Security-Policy wird jetzt vom Framework unterstützt (Siehe Details in der Plugin-Readme-Datei) Sie müssen das neue .__ hinzufügen. Cordova-Plugin-Whitelist-Plugin Das Verhalten der älteren Whitelist ist immer noch verfügbar über Plugin (obwohl nicht empfohlen).

Also habe ich das Cordova Whitelist Plugin installiert. Und fügte hinzu 

<allow-navigation href="http://*/*" />

in meiner config.xml-Datei.

87
Victor Balan

In meinem Fall war das Problem mit cordova-plugin-whitelist Plugin. Ich habe gerade das Plugin entfernt und hinzugefügt. Aktivieren Sie auch alle Anforderungen, indem Sie diesen Code <access Origin="*" /> in config.xml hinzufügen. Hier finden Sie die Befehle:

Sie müssen das vorhandene Plugin mit dem folgenden Befehl entfernen:

ionic cordova plugin rm cordova-plugin-whitelist

Dann fügen Sie es einfach mit dem folgenden Befehl hinzu:

ionic cordova plugin add cordova-plugin-whitelist

Ich hoffe es hilft.

1
Sandy

Wenn die Lösungen vorher nicht funktionieren ionic 3. Danke @rickie, endlich eine echte Lösung, drei Tage Wahnsinn !!! und jetzt ist alles in Ordnung. Gehe zu \platforms\Android\CordovaLib\src\org\Apache\cordova\engine\SystemWebViewClient.Java und kommentiere diese Zeilen:

public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    try {
        // Check the against the whitelist and lock out access to the WebView directory
        // Changing this will cause problems for your application
      /*  if (!parentEngine.pluginManager.shouldAllowRequest(url)) {
            LOG.w(TAG, "URL blocked by whitelist: " + url);
            // Results in a 404.
            return new WebResourceResponse("text/plain", "UTF-8", null);
        }*/

        CordovaResourceApi resourceApi = parentEngine.resourceApi;
        Uri origUri = Uri.parse(url);
        // Allow plugins to intercept WebView requests.
        Uri remappedUri = resourceApi.remapUri(origUri);

        if (!origUri.equals(remappedUri) || needsSpecialsInAssetUrlFix(origUri) || needsKitKatContentUrlFix(origUri)) {
            CordovaResourceApi.OpenForReadResult result = resourceApi.openForRead(remappedUri, true);
            return new WebResourceResponse(result.mimeType, "UTF-8", result.inputStream);
        }
        // If we don't need to special-case the request, let the browser load it.
        return null;
    } catch (IOException e) {
        if (!(e instanceof FileNotFoundException)) {
            LOG.e(TAG, "Error occurred while loading a file (returning a 404).", e);
        }
        // Results in a 404.
        return new WebResourceResponse("text/plain", "UTF-8", null);
    }
}
0

Den lokalen Inhalt sollten Sie, wenn Cordova kompiliert wird, im Ordner www ablehnen, dort sind Assets und andere Ordner für die Implementierung der apk oder eines entsprechenden iOS

d.h. 

<img src="assets/images/{your-file-name}">
0
Ivan Fretes