Forse non tutti lo sanno ma, quando si usa una WebView in un'app android, è possibile gestire le richieste di apertura di una nuova finestra (tipicamente link con target="_blank" e javascript che aprono una nuova window).
Questo può essere molto utile, ad esempio nel caso si vogliano aprire i link esterni nel browser di sistema o in una nuova activity all'interno della nostra app.
Per fare questo sono necessarie poche righe di codice, in particolare bisogna abilitare il supporto alla navigazione multi-window e gestire le richieste di apertura di una nuova finestra tramite un WebChromeClient.
Vediamo in dettaglio come è possibile fare.
In fase di setup della view sarà necessario aggiungere queste due righe di codice:
webView.getSettings().setSupportMultipleWindows(true); webView.setWebChromeClient(mWebChromeClient);
e definire un WebChromeClient come segue:
private WebChromeClient mWebChromeClient = new WebChromeClient() { @Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { try { WebView.HitTestResult result = view.getHitTestResult(); if ( result != null ) { String url = result.getExtra(); return true; } } catch(Exception e) { Logger.e(this, e); } return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg); } };
ridefinendo il metodo onCreateWindow nel quale, ad esempio, apriremo l'url, contenuto come extra nel risultato della richiesta di apertura di una nuova finestra, nel browser predefinito.