programing

Ionic requests는 안드로이드에서만 404를 반환하고 Chrome에서는 정상적으로 동작합니다.

bestprogram 2023. 3. 28. 22:45

Ionic requests는 안드로이드에서만 404를 반환하고 Chrome에서는 정상적으로 동작합니다.

ionic에서 튜토리얼 앱 repo를 복제했습니다.나는 달렸다

ionic start conference sidemenu

그리고 간단한 $105를 추가했습니다.get('myserver') (ngResources에서도 시도했습니다).

크롬에서는 완벽하게 작동했고, 모든 데이터를 다시 얻었지만 각도에서는 null 데이터만 받았고, 어떤 요청도 404 상태를 받았습니다.

주의: 호스트 서버와 로컬 서버에서 시도했습니다.Android에서는 둘 다 실패합니다.서버는 node.js REST API입니다.

콘솔에는 아무것도 인쇄되지 않기 때문에 요청은 서버에도 전달되지 않습니다.

Ionic을 탑재한 Android 앱을 디버깅하는 방법을 경험하신 분이나 가르쳐 주실 수 있습니까?

편집 1: 왜 필요한지는 모르겠지만 여기 있습니다.

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

여기서 중요한 것은 Cordova 4.0.0에 몇 가지 큰 변화가 있었다는 것입니다.

주요 변경 사항 [...] - 화이트리스트 기능은 플러그인을 통해 제공되고 있습니다(CB-7747). 화이트리스트 기능은 보다 안전하고 설정하기 쉽게 확장되었습니다.Content-Security-Policy 설정은 프레임워크에서 지원됩니다(플러그인 readme 참조).새로운 cordova-plugin-whitelist 플러그인 추가가 필요합니다.레거시 화이트리스트 동작은 아직 다음 사이트를 통해 이용할 수 있습니다.플러그인(권장하지 않음).

그래서 Cordova 화이트리스트 플러그인을 설치했습니다.그리고 덧붙였습니다

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

내 안에서config.xml파일.

제 경우 문제는cordova-plugin-whitelist플러그 인.방금 플러그인을 제거하고 추가했습니다.또한 이 코드를 추가하여 모든 요청을 활성화했습니다.<access origin="*" />config.xml. 다음 명령을 확인하십시오.

다음 명령을 사용하여 기존 플러그인을 제거해야 합니다.

ionic cordova plugin rm cordova-plugin-whitelist

다음 명령을 사용하여 추가합니다.

ionic cordova plugin add cordova-plugin-whitelist

도움이 됐으면 좋겠다.

이전 솔루션이 ionic 3에서 작동하지 않는 경우.드디어 @rickie가 3일간의 정신없음을 해결해줘서 고마워!!!이젠 괜찮아에 가다\platforms\android\CordovaLib\src\org\apache\cordova\engine\SystemWebViewClient.java다음 행에 코멘트를 붙입니다.

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

cordova 컴파일 시 로컬 콘텐츠는 www 폴더이며 apk 또는 동등한 iOS를 구현하기 위한 자산 및 기타 폴더가 있습니다.

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

언급URL : https://stackoverflow.com/questions/29826971/ionic-requests-return-404-only-on-android-in-chrome-it-works-fine