Android WebView: Determine <a> target= "_ blank" Android WebView: Determine <a> target= "_ blank" android android

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:

  1. iterates on all elements with a target=_blank attribute
  2. 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 })()");