2012-04-03 5 views
27

Hice una aplicación de muestra con WebView, en esa vista web la URL proviene de servicios web. Está funcionando bien, pero si hago clic en cualquier enlace dentro de ese WebView, automáticamente se usa el navegador web predeterminado. Pero quiero abrir solo en la vista web de mi aplicación. Aquí mi código:Android WebView clic abrir en WebView no es un navegador predeterminado

WvBikeSite = (WebView) findViewById(R.id.wv_bikeWebsite); 
wvBikeSite.loadUrl(getBundle.getString("www")); 

Respuesta

64

Tienes que configurar un webViewClient para tu webV iew.

muestra:

this.mWebView.setWebViewClient(new WebViewClient(){ 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url){ 
     view.loadUrl(url); 
     return true; 
    } 
}); 
+0

gracias ahora su funcionamiento muy bien – selva

+0

esto funciona! pero ¿hay alguna forma de permitir enlaces que tengan target = _blank para cargar en el navegador? – mim

+1

@mim, puede analizar la variable url y devolver false si contiene una determinada cadena –

1

Puede url siempre abierto dentro de vistas web mediante el uso de esto:

 @Override 
    public void onCreate(Bundle savedInstanceState) { 
    webview.setWebViewClient(new MyWebViewClient()); 
webview.getSettings().setJavaScriptEnabled(true); 
webview.getSettings().setPluginsEnabled(true); 
    } 


    private class MyWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 


      view.loadUrl(url); 
      return true; 
     } 

     @Override 
     public void onLoadResource(WebView view, String url){ 

     } 
    }  
+0

gracias a su trabajo Finne – selva

+0

Por favor, vote la respuesta – saba

10

Es necesario establecer un WebViewClient con el fin de anular ese comportamiento (la apertura de enlaces utilizando el navegador web) . Es obvio que ha declarado su WebView, pero luego establecer un WebViewClient así:

WebView myWebView = (WebView) findViewById(R.id.webview); 
myWebView.setWebViewClient(new WebViewClient()); 

Luego hay que definir su WebViewClient():

private class MyWebViewClient extends WebViewClient { 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    if (Uri.parse(url).getHost().equals("www.example.com")) { 
     // Designate Urls that you want to load in WebView still. 
     return false; 
    } 
    // Otherwise, give the default behavior (open in browser) 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    startActivity(intent); 
    return true; 
} 
} 

continuación, iniciar su WebViewClient:

WebView myWebView = (WebView) findViewById(R.id.webview); 
myWebView.setWebViewClient(new MyWebViewClient()); 

http://developer.android.com/guide/webapps/webview.html

+1

he intentado de esta manera también, ahora su agradecimiento a trabajar Mark Lyons – selva

2

es necesario llamar a wvBikeSite.setWebViewClient, por ejemplo:

MyWebViewClient wvc = new MyWebViewClient(); 
    wvBikeSite.setWebViewClient(wvc); 

Dónde MyWebViewClient anula shouldOverrideUrlLoading, a saber:

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return true; 
    } 
} 
5

enfrento mismo problema y me simplemente lo arreglé agregando una sola línea.

webview.setWebViewClient(new WebViewClient()); 

y esto resolvió mi problema.

+1

sin necesidad de crear una subclase personalizada de WebViewClient. –

1

lo hice así y su perfecto estado de funcionamiento ..

mWebView.setWebViewClient(new WebViewClient() { 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (url != null && url.startsWith("http://")) { 
       mWebView.loadUrl(url); 
       return true; 
      } else { 
       return false; 
      } 
     } 
    }); 
0

Aquí está mi código de cómo resolver el problema anterior (cuando cliking en el enlace que pedir navegador por defecto a OPN link)

import android.os.Bundle;import android.annotation.SuppressLint;import android.app.Activity; 
import android.view.Menu;import android.webkit.WebChromeClient; 
import android.webkit.WebView;public class MainActivity extends Activity{ 
`@SuppressLint("SetJavaScriptEnabled")@Override protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);String url="http://google.com";WebView Webview=(WebView) this.findViewById(R.id.webView1);  Webview.getSettings().setJavaScriptEnabled(true);Webview.loadUrl(url);}@Override public boolean onCreateOptionsMenu(Menu menu){//Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu);return true;}`} 
0

Esto abrirá ningún vínculo particular sólo en su aplicación ...

WebView web; 

web = (WebView) findViewById(R.id.web); 
web.setWebViewClient(new WebViewClient(){ 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     // TODO Auto-generated method stub 
     super.onPageStarted(view, url, favicon); 
    } 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url != null && url.startsWith("http://www.xplorerstrick.net")) { 
      view.loadUrl(url); 
      progDailog.show(); 
      return true; 
     } 
     else { 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      startActivity(intent); 
      return true; 
     } 
    } 
} 
0
webview.setWebViewClient(new WebViewClient()); 
webview.loadUrl(url); 

Establezca el cliente de vista web.

1

Pruebe este, ese método está en desuso.

public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
      return super.shouldOverrideUrlLoading(view, request); 
     } 
0

La mayor parte de la respuesta es correcta, pero por favor, observe que: SupportMultipleWindows deben configurarse como falso.

mWebView.getSettings().setSupportMultipleWindows(false); 

y ahora establecido webViewClint y obtener URL de carga.

mWebView.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url){ 

    Log.d(TAG,"URL: "+url); 
    view.loadUrl(url); 

    /** 
    * if you wanna open outside of app 
    if (url != null && url.startsWith(URL)) { 
    view.loadUrl(url); 
    return false; 
    } 
    // Otherwise, give the default behavior (open in browser) 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    startActivity(intent);**/ 
    return true; 

} 

@Override 
public void onPageStarted(WebView view, String url, Bitmap favicon) { 
    super.onPageStarted(view, url, favicon); 
} 

@Override 
public void onLoadResource(WebView view, String url) { 
    super.onLoadResource(view, url); 
} 

@Override 
public void onPageFinished(WebView view, String url) { 
    super.onPageFinished(view, url); 

    } 
}); 
Cuestiones relacionadas