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.
- Android WebView Reproducción de vídeo HTML5 / h.264 / mp4, Cómo llegar a MediaPlayer
- Solución para la carga de archivos en Android 4.4 mediante la reflexión
- WYSIWYG en la vista web de Android
- ¿WebViewClient y WebChromeClient se excluyen mutuamente?
- Método WebView + WebChromeClient onCreateWindow no se llama a target = "_ blank"
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);
- Abrir un menú de carga de archivos en una vista web no funciona
- Se bloquea el video HTML 5 al ir a pantalla completa
- ¿Cómo puedo detectar cuándo una página WebView intenta cerrar?
- ¿Cuál es la diferencia entre setWebViewClient y setWebChromeClient?
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; } };