如果WebView页面中链接的<a>标签是target=”_blank”,而你的WebView又没有做任何处理,这个时候就会点击无效的状况,是不是很莫名其妙?
target由多个定义类型
_blank:表示将链接打开新窗口
_self:表示在目前窗口或框架里打开链接(默认的)
_parent:表示在父窗口或框架里打开链接
_top:表示在顶层框架里打开新链接
另外还可以直接把框架名称指定给target,表示在某个框架也中打开链接,像csdn这样点击左面的目录树,在右边打开新链接就是这种!
解决方案也简单,继承WebChromeClient,重写onCreateWindow是关键,
一、首先设置,不然不会走回调:
webSetting.setSupportMultipleWindows(true);
二、然后请看代码:
@Override
public boolean onCreateWindow(WebView webView, boolean isDialog, boolean isUserGesture, Message resultMsg) {
X5WebView x5WebView = new X5WebView(activity);
X5WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
x5WebView.setWebChromeClient(new CustomWebChromeClient(activity));
x5WebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//拦截url,跳转新窗口
if (activity != null) {
Intent intent = new Intent(activity, MyWebActivity.class);
intent.putExtra(Constants.INTENT_KEY_URL, url);
activity.startActivity(intent);
}
//防止触发现有界面的WebChromeClient的相关回调
return true;
}
});
transport.setWebView(x5WebView);
resultMsg.sendToTarget();
return true;
}