Java 如果使用loadData加载html文本,则WebView超链接单击不起作用
Java 如果使用loadData加载html文本,则WebView超链接单击不起作用,java,android,android-webview,Java,Android,Android Webview,WebView如果我使用loadData加载html文本,则超链接单击不起作用 代码如下: WebView webview = new WebView(context); webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); webview.getSettings().setDisplayZoomControls(false); webview.setWebChr
WebView
如果我使用loadData
加载html文本,则超链接单击不起作用
代码如下:
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);
showCustomWebViewClient
类不可用
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;
}
}
}
我找到了解决办法。已删除webview.getSettings().setSupportMultipleWindows(true);和webview.setWebChromeClient(新的WebChromeClient());