webview对于
<a href="http://www.google.com" target="_blank">new window</a>
这种形式的tag,会要求起一个新窗口打开,而要截获这个请求,则可以在webChromeClient的onCreateWindow()回调函数中进行处理,
今天有个小的需求是,获知打开的新window的url,本以为很简单,谁知道webChromeClient比较SB,全部信息都被包在一个message里,
根本取不到url,搜了老半天,只在stackoverflow中有一个比较hack的方法:
http://stackoverflow.com/questions/15368885/android-webview-determine-a-target-blank
mWebView.setWebChromeClient(new WebChromeListener() {
@Override
public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) {
WebView newWebView = new WebView(view.getContext());
newWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);
return true;
}
});
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(newWebView);
resultMsg.sendToTarget();
return true;
}
});