android - poner - establecer navegador predeterminado windows 7
Al hacer clic en las URL se abre el navegador predeterminado (6)
He cargado una URL externa en mi WebView
. Ahora, lo que necesito es que cuando el usuario haga clic en los enlaces en la página cargada, tenga que funcionar como un navegador normal y abrir el enlace en la misma WebView
. ¿Pero está abriendo el navegador predeterminado y cargando la página allí?
He habilitado JavaScript. Pero todavía no está funcionando. ¿He olvidado algo?
Añade estas 2 líneas en tu código -
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());
El método boolean shouldOverrideUrlLoading(WebView view, String url)
está en desuso en la API 24. Si está soportando nuevos dispositivos, debe usar boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)
debería boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)
.
Puedes usar ambos haciendo algo como esto:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
newsItem.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return true;
}
});
} else {
newsItem.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
}
La documentation oficial dice, haga clic en un enlace en una aplicación WebView que iniciará las URL. Es necesario anular este comportamiento predeterminado
myWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
o si no hay lógica condicional en el método, simplemente haga esto
myWebView.setWebViewClient(new WebViewClient());
La respuesta de Arulx Z fue exactamente lo que estaba buscando.
Estoy escribiendo una aplicación con Navigation Drawer con recyclerview y webviews, para mantener la navegación web dentro de la aplicación, independientemente de los hipervínculos en los que se haga clic (por lo tanto, no se inicia el navegador web externo). Para eso bastará con poner las siguientes 2 líneas de código:
mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());
exactamente debajo de su declaración de WebView.
Aquí hay un ejemplo de mi código implementado de WebView:
public class WebView1 extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView wv = (WebView) findViewById(R.id.wv1); //webview statement
wv.setWebViewClient(new WebViewClient()); //the lines of code added
wv.setWebChromeClient(new WebChromeClient()); //same as above
wv.loadUrl("http://www.google.com");
}}
De esta manera, cada enlace que haga clic en el sitio web se cargará dentro de su WebView. (Usando Android Studio 1.2.2 con todos los SDKs actualizados)
Si está utilizando un WebView
, tendrá que interceptar los clics usted mismo si no desea el comportamiento predeterminado de Android.
Puede monitorear eventos en una vista WebView
usando un WebViewClient
. El método que desea es shouldOverrideUrlLoading()
. Esto le permite realizar su propia acción cuando se selecciona una URL particular.
Establece el WebViewClient
de su WebView
usando el método setWebViewClient()
.
Si observa la muestra de WebView
en el SDK, hay un ejemplo que hace exactamente lo que quiere. Es tan simple como:
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
en algunos casos, es posible que necesite una anulación de onLoadResource si obtiene una redirección que no active el método de carga de URL. En este caso probé lo siguiente:
@Override
public void onLoadResource(WebView view, String url)
{
if (url.equals("http://redirectexample.com"))
{
//do your own thing here
}
else
{
super.onLoadResource(view, url);
}
}