在使用 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;
}
}
}
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;
}
}
}