La vista web de Android inicia el navegador cuando llama a loadurl


473

Creé un Activityque tiene un título y una vista web en a LinearLayout. En el onResume()método que llama webView.loadUrl(url). El problema es que la actividad muestra primero el título con el resto de la pantalla en blanco, luego se inicia el navegador del dispositivo con la página de la URL. Lo que quiero ver es la página que se muestra WebViewdebajo del título. ¿Cual podría ser el problema?

Editar : Ok, hice una búsqueda adicional y encontré esta:

Al hacer clic en las URL se abre el navegador predeterminado

Apunta al WebViewtutorial aquí .

Simplemente implemente el cliente web y configúrelo.


Menciono esto porque resolviste mi problema ... Gracias.
Jesse Black el

2
@ Ray, considere escribir una respuesta a esta pregunta, si ha encontrado una solución, y acéptela. Esto ayudará a otras personas con el mismo problema.
HitOdessit

1
Tuve un problema aún más desagradable. Resulta que incluso una redirección se cargará con el navegador si no se usa un WebViewClient personalizado.
Jakob Weisblat


Este también cuenta sobre esto ... youtube.com/watch?v=4bIF5In1c8s
Athira Reddy

Respuestas:


799

Respondiendo a mi pregunta basada en las sugerencias de Maudicus y Hit.

Consulte el tutorial de WebView aquí . Simplemente implemente el cliente web y configúrelo antes de loadUrl . La forma más simple es:

myWebView.setWebViewClient(new WebViewClient());

Para un procesamiento más avanzado del contenido web, considere ChromeClient.


3
Para evitar que WebView inicie el navegador predeterminado al abrir la página inicial.
Magno C

23
¡Gracias por esta increíble e increíble pequeña brujería! +1 ... MENOS UNO PARA TI, Android ...
Josh

Excelente respuesta Resolvió mi problema también.
Omid1989

¿Esto solo funciona para la carga inicial? ¿Qué sucede si desea navegar por el navegador desde la aplicación?
logicbloke

55
myWebView.webViewClient = WebViewClient()en Kotlin!
Thomas Pritchard

98

Utilizar este:

lWebView.setWebViewClient(new WebViewClient());

@DigvijaySingh verifique el original de la respuesta aceptada. Originalmente no tenía este código. Se agregó mucho después de esta respuesta
Vladyslav Matviienko

52

usar así:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dedline);

    WebView myWebView = (WebView) findViewById(R.id.webView1);
    myWebView.setWebViewClient(new WebViewClient());
    myWebView.loadUrl("https://google.com");
}

25

Haz tu actividad así.

public class MainActivity extends Activity {
WebView browser;

@Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // find the WebView by name in the main.xml of step 2
    browser=(WebView)findViewById(R.id.wvwMain);

    // Enable javascript
    browser.getSettings().setJavaScriptEnabled(true);  

    // Set WebView client
    browser.setWebChromeClient(new WebChromeClient());

    browser.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
                }
        });
     // Load the webpage
    browser.loadUrl("http://google.com/");
   }
}

1
setJavaScriptEnabled(true)introduce vulnerabilidades XSS en su aplicación. No lo use si no necesita JavaScript
apex39

La línea que habilita JavaScript es muy importante; de ​​lo contrario, la You need to enable JavaScript to run this app.búsqueda en Google solo revelará a las personas que tienen problemas con React Native y se volverá loco porque JavaScript ya está habilitado en la configuración del navegador.
Jordan H

19

Estaba enfrentando el mismo problema y encontré la solución Documentación oficial de Android sobre WebView

Aquí está mi onCreateView()método y aquí utilicé dos métodos para abrir las URL. El

método 1 está abriendo la url en el navegador y el

método 2 está abriendo la url en su WebView deseado.
Y estoy usando el Método 2 para mi aplicación y este es mi código:

public class MainActivity extends Activity {
   private WebView myWebView;

     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

      View rootView = inflater.inflate(R.layout.fragment_webpage_detail, container, false);

      // Show the dummy content as text in a TextView.
      if (mItem != null) {

         /* Method : 1
          This following line is working fine BUT when we click the menu item then it opens the URL in BROWSER not in WebView */
         //((WebView)   rootView.findViewById(R.id.detail_area)).loadUrl(mItem.url);

        // Method : 2
        myWebView = (WebView) rootView.findViewById(R.id.detail_area); // get your WebView form your xml file
        myWebView.setWebViewClient(new WebViewClient()); // set the WebViewClient
        myWebView.loadUrl(mItem.url); // Load your desired url
    }

    return rootView;
}                                                                                               }

6

Simplemente responda, puede usar así

public class MainActivity extends AppCompatActivity {

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         WebView webView = new WebView(this);
         setContentView(webView);
         webView.setWebViewClient(new WebViewClient());
         webView.loadUrl("http://www.google.com");
   }
}

6

Prueba este código ...

private void startWebView(String url) {

    //Create new webview Client to show progress dialog
    //When opening a url or click on link

    webView.setWebViewClient(new WebViewClient() {      
        ProgressDialog progressDialog;

        //If you will not use this method url links are opeen in new brower not in webview
        public boolean shouldOverrideUrlLoading(WebView view, String url) {              
            view.loadUrl(url);
            return true;
        }

        //Show loader on url load
        public void onLoadResource (final WebView view, String url) {
            if (progressDialog == null) {
                // in standard case YourActivity.this
                progressDialog = new ProgressDialog(view.getContext());
                progressDialog.setMessage("Loading...");
                progressDialog.show();
            }
        }
        public void onPageFinished(WebView view, String url) {
            try{
            if (progressDialog.isShowing()) {
                progressDialog.dismiss();
                progressDialog = null;
            }
            }catch(Exception exception){
                exception.printStackTrace();
            }
        }

    }); 

     // Javascript inabled on webview  
    webView.getSettings().setJavaScriptEnabled(true); 

    // Other webview options
    /*
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.setScrollbarFadingEnabled(false);
    webView.getSettings().setBuiltInZoomControls(true);
    */

    /*
     String summary = "<html><body>You scored <b>192</b> points.</body></html>";
     webview.loadData(summary, "text/html", null); 
     */

    //Load url in webview
    webView.loadUrl(url);
}

1

Si ve una página vacía , habilite JavaScript.

webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.