未调用WebViewClient :: onReceivedSslError

时间:2018-02-07 11:33:08

标签: android android-webview webviewclient

我已将WebViewClient实现附加到WebView。

appView.setWebViewClient(new AppViewClient());

调用我的onReceivedSslErroronReceivedError实施,除了Mixed Content错误外,其他所有预期错误。

我对两种方法的实施:

Log.i(TAG, "Error Cought");

正如我所说,除Mixed Content错误外,他们会遇到各种错误。我的请求在没有调用这些方法的情况下被阻止。

1 个答案:

答案 0 :(得分:-1)

您使用的是哪个API版本? 默认情况下,MIX CONTENT被允许在21之前。

您可以尝试在网络视图中添加此设置:

webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_NEVER_ALLOW);

对于低于21的API级别:

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 :)我可以     建议尝试两件事。

  1. 使用控制台消息识别此错误。您可以执行字符串匹配以检查MIX CONTENT错误。
  2. myWebView.setWebChromeClient(new WebChromeClient() {
      public void onConsoleMessage(String message, int lineNumber, String sourceID) {
        Log.d("MyApplication", message + " -- From line "
                             + lineNumber + " of "
                             + sourceID);
      }
    });
    
    1. 拦截请求并检查网址。检查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;
          }