使用不带 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.
我正在开发 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.