在使用 loadData 加载 html 文本的情况下,WebView 超链接点击不起作用

WebView hyperlink click is not working in case of used loadData for loading html text

如果我使用 loadData 加载 html 文本,

WebView 超链接点击不起作用。

这是代码:

WebView webview = new WebView(context);
        webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webview.getSettings().setDisplayZoomControls(false);
        webview.setWebChromeClient(new WebChromeClient());
        webview.getSettings().setSupportMultipleWindows(true);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.getSettings().setDefaultTextEncodingName("utf-8");
        if (Build.VERSION.SDK_INT >= 21) {
            webview.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        }
        webview.setWebViewClient(new CustomWebViewClient());
        webview.loadData(st, "text/html", "UTF-8");
        mHolder.webview.removeAllViews();
        mHolder.webview.addView(webview);

显示 CustomWebViewClient class 无效。

  private class CustomWebViewClient extends WebViewClient {

    @Override
    public boolean shouldOverrideUrlLoading(WebView wv, String url) {
        if (wv.getHitTestResult().getType() > 0) {
            wv.getContext().startActivity(
                    new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            return true;
        } else {
            return false;
        }
    }
}

请给出原因和解决方法

使用 'loadDataWithBaseURL' 方法加载 html 文本

webview.loadDataWithBaseURL(null, st, "text/html", "utf-8", null);

而不是

 webview.loadData(st, "text/html", "UTF-8");

 public class CustomWebViewClient extends WebViewClient
     {
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
          if(request.getUrl().toString().contains("about:blank"))
              return true;
          if (view.getHitTestResult().getType() > 0) {
              view.getContext().startActivity(
                      new Intent(Intent.ACTION_VIEW, Uri.parse(String.valueOf(request.getUrl()))));
              return true;
          } else {
              return false;
          }
      }
      public boolean shouldOverrideUrlLoading(WebView view, String request) {
          if(request.contains("about:blank"))
              return true;
          if (view.getHitTestResult().getType() > 0) {
              view.getContext().startActivity(
                      new Intent(Intent.ACTION_VIEW, Uri.parse(String.valueOf(request))));
              return true;
          } else {
              return false;
          }
      }
  }