Android WebView: Determine <a> target= "_ blank"
I just solved this issue myself. Here is how I fixed it.
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; }});
You can do the following: (ugly but will work)
inside onPageFinished(), inject a javascript code fragment into the page which does something like:
- iterates on all elements with a target=_blank attribute
- change the href for those elements to external://[original href]
If the site uses jquery it should be easy. If not, you can still do it using standard DOM Javascript.
on your shouldOverrideUrlLoading(), look for those external://* links and open them externally.
In order to inject the javascript , do the following:
webView.loadUrl("javascript:(function() { PLACE YOUR JS CODE HERE })()");