WebViewClient::onReceivedSslError 未被调用
WebViewClient::onReceivedSslError is not called
我已将我的 WebViewClient 实现附加到我的 WebView。
appView.setWebViewClient(new AppViewClient());
我的 onReceivedSslError
和 onReceivedError
实现被调用时出现了除 Mixed Content
错误之外的所有预期错误。
我对这两种方法的实现:
Log.i(TAG, "Error Cought");
正如我所说,它们会在出现 Mixed Content
错误以外的各种错误时被调用。我的请求在没有调用这两种方法的情况下被阻止。
您使用的是哪个 API 版本?
默认情况下,允许 MIX CONTENT
在 21 之前。
您可以尝试在网络视图中添加此设置:
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_NEVER_ALLOW);
API 21 级以下:
try {
Method m = WebSettings.class.getMethod("setMixedContentMode", int.class);
if ( m != null ) {
m.invoke(webView.getSettings(), 1); //MIXED_CONTENT_NEVER_ALLOW
}
}
catch (Exception ex) {
}
很高兴知道您已经了解 MixedContentMode :) 我可以
建议尝试两件事。
- 使用控制台消息来识别此错误。您可以进行字符串匹配来检查 MIX CONTENT 错误。
myWebView.setWebChromeClient(new WebChromeClient() {
public void onConsoleMessage(String message, int lineNumber, String sourceID) {
Log.d("MyApplication", message + " -- From line "
+ lineNumber + " of "
+ sourceID);
}
});
拦截请求并检查url。检查 source code.
中的 WebActivity 实现
mWebView.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view,
WebResourceRequest request) {
String url = request.getUrl().toString();
if (!URLUtil.isHttpsUrl(url)) {
Logger.loge("Secure connection required, but insecure URL requested "
+ "explicitly, or as a part of the page.");
return createNewSecurityErrorResponse();
}
return super.shouldInterceptRequest(view, request);
}
});
private WebResourceResponse createNewSecurityErrorResponse() {
WebResourceResponse response = new WebResourceResponse("text/plain", "UTF-8", null);
response.setStatusCodeAndReasonPhrase(HTTP_FORBIDDEN, "Secure connection required");
return response;
}
我已将我的 WebViewClient 实现附加到我的 WebView。
appView.setWebViewClient(new AppViewClient());
我的 onReceivedSslError
和 onReceivedError
实现被调用时出现了除 Mixed Content
错误之外的所有预期错误。
我对这两种方法的实现:
Log.i(TAG, "Error Cought");
正如我所说,它们会在出现 Mixed Content
错误以外的各种错误时被调用。我的请求在没有调用这两种方法的情况下被阻止。
您使用的是哪个 API 版本?
默认情况下,允许 MIX CONTENT
在 21 之前。
您可以尝试在网络视图中添加此设置:
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_NEVER_ALLOW);
API 21 级以下:
try {
Method m = WebSettings.class.getMethod("setMixedContentMode", int.class);
if ( m != null ) {
m.invoke(webView.getSettings(), 1); //MIXED_CONTENT_NEVER_ALLOW
}
}
catch (Exception ex) {
}
很高兴知道您已经了解 MixedContentMode :) 我可以 建议尝试两件事。
- 使用控制台消息来识别此错误。您可以进行字符串匹配来检查 MIX CONTENT 错误。
myWebView.setWebChromeClient(new WebChromeClient() {
public void onConsoleMessage(String message, int lineNumber, String sourceID) {
Log.d("MyApplication", message + " -- From line "
+ lineNumber + " of "
+ sourceID);
}
});
拦截请求并检查url。检查 source code.
中的 WebActivity 实现mWebView.setWebViewClient(new WebViewClient() { @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { String url = request.getUrl().toString(); if (!URLUtil.isHttpsUrl(url)) { Logger.loge("Secure connection required, but insecure URL requested " + "explicitly, or as a part of the page."); return createNewSecurityErrorResponse(); } return super.shouldInterceptRequest(view, request); } }); private WebResourceResponse createNewSecurityErrorResponse() { WebResourceResponse response = new WebResourceResponse("text/plain", "UTF-8", null); response.setStatusCodeAndReasonPhrase(HTTP_FORBIDDEN, "Secure connection required"); return response; }