android - example - webview evaluatejavascript
Android: abra enlaces_blank de destino en WebView con un navegador externo (3)
Después de visitar los enlaces anteriores, se me ocurre 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;
}
});
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 enlaces con el target
definido en el navegador del dispositivo estándar externo y los que no lo tienen dentro de la vista web.
Estoy usando un WebViewClient
y probé con esta función pero aún así todos mis enlaces se abren dentro de la 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 enlaces en blanco externamente?
¡Gracias!
PD: Para evitar malentendidos: no puedo usar este enfoque porque la única forma en que sé que el enlace debe abrirse externamente es el atributo de target
.
Me enfrenté al mismo problema. Quería abrir las páginas de mis sitios web dentro de la aplicación y descansar todas las páginas deberían estar abiertas en el navegador predeterminado. Utilicé una técnica. Si la URL contiene el nombre de mi sitio web, lo abrí en WebView y descanse todos los sitios web abiertos en el navegador predeterminado.
Encontrar el código de abajo, espero que sea útil para todos los que enfrentaron 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 this y this . Y puede configurar un WebViewClient para el nuevo WebView y anular el método shouldOverrideUrlLading, luego 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, así que configuro un WebViewClient para el nuevo WebView.
Por cierto, si elimina la vista web anterior, cuando vuelva del navegador, la vista web estará en blanco. Así que conservé la vista web y agregué una nueva, pero configuré la visibilidad como "desaparecida".