WebView 在 HTTPS url 上显示 net::ERR_CLEARTEXT_NOT_PERMITTED
WebView shows net::ERR_CLEARTEXT_NOT_PERMITTED on HTTPS url
我正在尝试加载符合 HTTPS 安全协议的 url,但是当我尝试在 WebView 上加载时,android 显示 net::ERR_CLEARTEXT_NOT_PERMITTED。为什么?是HTTPS 有什么问题?
显示它的源代码是:
public class InternalWebBrowserActivityHelperImpl implements InternalWebBrowserActivityHelper, Constants {
private final String TAG = getClass().getSimpleName();
@NonNull
private InternalWebBrowserActivityView activityView;
public InternalWebBrowserActivityHelperImpl(@NonNull InternalWebBrowserActivityView activityView){
this.activityView = activityView;
}
public WebChromeClient getWebChromeClient = new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
};
public WebViewClient getWebViewClient() {
return new WebViewClient() {
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
LoggerManager.handlesError("onReceivedError", request.getUrl().toString());
}else{
LoggerManager.handlesError("onReceivedError", error.toString());
}
activityView.hideLoadingView();
activityView.showWebView();
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
LoggerManager.handlesError("onPageFinished", url);
activityView.hideLoadingView();
activityView.showWebView();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//activityView.showLoadingView();
LoggerManager.handlesError("override", url);
return super.shouldOverrideUrlLoading(view, url);
}
};
}
@Override
public void setupHelper(String url) {
//7activityView.showLoadingView();
activityView.showWebView();
WebSettings.ZoomDensity zoomDensity = WebSettings.ZoomDensity.FAR;
activityView.getFullWebView().getSettings().setJavaScriptEnabled(true);
activityView.getFullWebView().getSettings().setDomStorageEnabled(true); // Add this
activityView.getFullWebView().getSettings().setDefaultZoom(zoomDensity);
activityView.getFullWebView().getSettings().setSupportZoom(true);
activityView.getFullWebView().getSettings().setBuiltInZoomControls(true);
activityView.getFullWebView().requestFocus(View.FOCUS_DOWN);
activityView.getFullWebView().setWebChromeClient(getWebChromeClient);
activityView.getFullWebView().setWebViewClient(getWebViewClient());
activityView.getFullWebView().loadUrl(url);
}
}
谢谢
你确定你给你的 webview 的 URL 是 HTTPS 吗?
否则,快速修复是在您的 application
中添加以下行,如下所示:
<application
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
....
</application>
我强烈建议您创建 network_security_config
以仅允许您的域和子域。这是一个快速 tutorial
我正在尝试加载符合 HTTPS 安全协议的 url,但是当我尝试在 WebView 上加载时,android 显示 net::ERR_CLEARTEXT_NOT_PERMITTED。为什么?是HTTPS 有什么问题?
显示它的源代码是:
public class InternalWebBrowserActivityHelperImpl implements InternalWebBrowserActivityHelper, Constants {
private final String TAG = getClass().getSimpleName();
@NonNull
private InternalWebBrowserActivityView activityView;
public InternalWebBrowserActivityHelperImpl(@NonNull InternalWebBrowserActivityView activityView){
this.activityView = activityView;
}
public WebChromeClient getWebChromeClient = new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
};
public WebViewClient getWebViewClient() {
return new WebViewClient() {
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
LoggerManager.handlesError("onReceivedError", request.getUrl().toString());
}else{
LoggerManager.handlesError("onReceivedError", error.toString());
}
activityView.hideLoadingView();
activityView.showWebView();
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
LoggerManager.handlesError("onPageFinished", url);
activityView.hideLoadingView();
activityView.showWebView();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//activityView.showLoadingView();
LoggerManager.handlesError("override", url);
return super.shouldOverrideUrlLoading(view, url);
}
};
}
@Override
public void setupHelper(String url) {
//7activityView.showLoadingView();
activityView.showWebView();
WebSettings.ZoomDensity zoomDensity = WebSettings.ZoomDensity.FAR;
activityView.getFullWebView().getSettings().setJavaScriptEnabled(true);
activityView.getFullWebView().getSettings().setDomStorageEnabled(true); // Add this
activityView.getFullWebView().getSettings().setDefaultZoom(zoomDensity);
activityView.getFullWebView().getSettings().setSupportZoom(true);
activityView.getFullWebView().getSettings().setBuiltInZoomControls(true);
activityView.getFullWebView().requestFocus(View.FOCUS_DOWN);
activityView.getFullWebView().setWebChromeClient(getWebChromeClient);
activityView.getFullWebView().setWebViewClient(getWebViewClient());
activityView.getFullWebView().loadUrl(url);
}
}
谢谢
你确定你给你的 webview 的 URL 是 HTTPS 吗?
否则,快速修复是在您的 application
中添加以下行,如下所示:
<application
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
....
</application>
我强烈建议您创建 network_security_config
以仅允许您的域和子域。这是一个快速 tutorial