使用不带 ssl 的 appassets.androidplatform.net(用于通过 http 发送 ajax 请求)

use appassets.androidplatform.net without ssl (for sending ajax requsets by http)

我正在开发 webview android 应用程序,我通过“https://appassets.androidplatform.net/assets/www/index.[= 加载我的 html 和 js 代码25=]",但在我的 js 代码中,我使用 ajax 请求到 API,这是 运行,没有 ssl,所以 js 不允许我从 https 来源发出 ajax 请求到http服务器。当我尝试使用 http://appassets.androidplatform.net/assets/www/index.html 时,出现错误 'net::ERR_NAME_NOT_RESOLVED'。有什么方法可以在不为 API 服务器购买 ssl 或使用 file:// 协议加载代码的情况下使其工作?

我不知道它是否有帮助,但这是我的 WebViewAssetLoader 代码:

assetLoader = new WebViewAssetLoader.Builder()
            .addPathHandler("/assets/", new WebViewAssetLoader.AssetsPathHandler(this))
            .addPathHandler("/res/", new WebViewAssetLoader.ResourcesPathHandler(this))
            .build();

public WebResourceResponse shouldInterceptRequest(WebView view,
                                                      WebResourceRequest request) {
        if (String.valueOf(request.getUrl()).endsWith(".js")) {
            try {
                return new WebResourceResponse("text/javascript", "UTF-8", getAssets().open(String.valueOf(request.getUrl()).replace("http://appassets.androidplatform.net/assets/","")));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return assetLoader.shouldInterceptRequest(request.getUrl());
    }

答案很简单 首先,我必须将 android:usesCleartextTraffic="true" 添加到标签中。 其次我必须使用 webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);在我的 activity.