WebChromeClient abre el enlace en el navegador

He buscado y leído un montón de mensajes, pero no puedo averiguar cómo hacerlo en mi código.

Quiero utilizar la geolocalización en mi aplicación y la necesidad de ver en webChromeClient en lugar de webViewClient wich que utilizo para los archivos html ahora y los enlaces se quedan en la misma vista.

Cuando cambio esto a webChromeClient, los enlaces html, como <a href="http://url/file.php?q=123" , de repente se abren en el navegador!

¿Cómo puedo evitar esto?

 myWebView = new WebView(this); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.getSettings().setLoadWithOverviewMode(true); myWebView.getSettings().setUseWideViewPort(true); myWebView.getSettings().setGeolocationEnabled(true); myWebView.setWebChromeClient(new WebChromeClient() { public void onGeolocationPermissionsShowPrompt(String origin, android.webkit.GeolocationPermissions.Callback callback) { callback.invoke(origin, true, false); } }); myWebView.loadUrl("file:///android_asset/HTML/index.html"); setContentView(myWebView); 

WebChromeClient no contiene el método shouldOverrideUrlLoading, lo hace el WebViewClient. Recuerde que el "WebView" puede y usa tanto WebViewClient como WebChromeClient al mismo tiempo, si se especifica. El WebViewClient agrega métodos que no están disponibles sin un cliente asignado (manteniendo la navegación en la vista web). Lo mismo con WebChromeClient tiene métodos específicos que puede utilizar (obtener título de página en carga, por ejemplo).

Así que usted puede construir su código como este:

 WebView web = (WebView)findViewById(R.id.web); WebSettings webSettings = web.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setGeolocationEnabled(true); webSettings.setSupportMultipleWindows(true); // This forces ChromeClient enabled. web.setWebChromeClient(new WebChromeClient(){ @Override public void onReceivedTitle(WebView view, String title) { getWindow().setTitle(title); //Set Activity tile to page title. } }); web.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return false; } }); 

Conseguí alrededor de esto fijando un WebViewClient falso además del WebChromeClient. No sé por qué, pero cuando saca esta línea, la página web comienza a abrirse en el navegador de nuevo.

 mBrowser.setWebViewClient(new WebViewClient()); 

Para abrir vínculos en el navegador, puede utilizar una intent en el método shouldOverrideUrlLoading para iniciar la URL en un navegador en lugar de usar su webview para manejar el enlace:

 webView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url != null && url.startsWith("http://")) { view.getContext().startActivity( new Intent(Intent.ACTION_VIEW, Uri.parse(url))); return true; } else { return false; } } } 

Si desea cargar el uso de la vista web:

 WebViewClient yourWebClient = new WebViewClient() { // Override page so it's load on my view only @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // This line we let me load only pages with an anchor tag if ( url.contains("url") == true ) //Load new URL Don't override URL Link return false; // Return true to override url loading (In this case do nothing). return true; } }; 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.