Android: abra los vínculos _blank de destino en WebView con un navegador externo
Construyo un WebView
que muestra un sitio web. El sitio web contiene enlaces sin un atributo target="_blank"
y algunos con él.
Necesito abrir los vínculos con el target
definido en el navegador de dispositivo estándar externo y los que no están dentro de WebView.
- Abrir PDF en un WebView
- URL de Soundcloud abierta en la aplicación nativa Soundcloud de WebView
- Cómo obtener la página en blanco en Android WebViewClient
- WebView - no puede descargar el archivo sin solicitarlo dos veces?
- Deje de cargar en webViewClient
Estoy utilizando un WebViewClient
y he probado con esta función, pero todavía todos mis enlaces se abren en el WebView
:
Alternativa 1:
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return super.shouldOverrideUrlLoading(view, url); }
Alternativa 2:
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; }
¿Alguien sabe cómo puedo abrir vínculos en blanco externamente?
¡Gracias!
PS: Para evitar malentendidos: No puedo usar este enfoque porque la única manera de saber que el enlace debe abrirse externallly es el atributo de target
.
- ¿Qué se considera onPageFinished en el WebViewClient para Android?
- Android WebViewClient onLoadResource () llamada agian después de onPageFinished () cuando targetSdkVersion es 19
- Habilitación de protocolos SSL específicos con Android WebViewClient
- ¿WebViewClient y WebChromeClient se excluyen mutuamente?
- Android 4.4 dando ERR_CACHE_MISS error en onReceivedError para WebView volver
- Android - Utilice OkHttp con Webview
- Interceptar y anular las solicitudes HTTP de WebView
- Android JS en WebView.loadUrl ()
Después de visitar los enlaces anteriores, he llegado con este código y espero que esto ayude.
wv.getSettings().setSupportMultipleWindows(true); wv.setWebChromeClient(new WebChromeClient() { @Override public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, android.os.Message resultMsg) { WebView.HitTestResult result = view.getHitTestResult(); String data = result.getExtra(); Context context = view.getContext(); Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(data)); context.startActivity(browserIntent); return false; } });
Me enfrenté al mismo problema. Quería abrir mis páginas de sitios web dentro de la aplicación y descansar todas las páginas deben estar abiertas en el Navegador por defecto. Utilicé una técnica. Si URL contiene el nombre de mi sitio web, lo abrí en WebView y reposo todos los sitios web abiertos en el navegador predeterminado.
Encontrar abajo el código, espero que sería útil para todos los que se enfrentan a tales problemas.
private class MyBrowser extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.contains("/internetgeeks")) { browser.loadUrl(url); return false; } else { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(url)); startActivity(intent); return true; } } }
También tengo el mismo problema y ahora he encontrado la solución.
También necesitas usar WebChromeClient. Puedes ver esto y esto . Y puede configurar un WebViewClient para el nuevo WebView y reemplazar el método shouldOverrideUrlLoading, entonces puede obtener la URL y hacer lo que quiera aquí. Si no configura WebViewClient, creo que debería funcionar también. En mi caso, quiero obtener la url para que establezca un WebViewClient a la nueva WebView.
Por cierto, si quitas la vista previa de la web y cuando regresas del navegador, la vista web está en blanco. Así que mantuve la webview y agregó una nueva, pero establecer la visibilidad de "ido".
- Fragmento de fragmento de Android como fragmento de diálogo o fragmento habitual
- Alpha-gradient en Android