Android Webview avvia il browser quando si chiama loadurl


473

Ho creato un Activityche ha un titolo e una vista Web in a LinearLayout. Nel onResume()metodo che chiama webView.loadUrl(url). Il problema è che l'attività mostra prima il titolo con il resto dello schermo vuoto, quindi il browser del dispositivo viene avviato con la pagina per l'URL. Quello che voglio vedere è la pagina mostrata WebViewsotto il titolo. Quale potrebbe essere il problema?

Modifica : Ok, ho fatto qualche ulteriore ricerca e ho trovato questo:

Facendo clic sugli URL si apre il browser predefinito

Indica il WebViewtutorial qui .

Basta implementare il client Web e impostarlo.


Ne parlo perché hai risolto il mio problema ... Grazie.
— Jesse Black,

2
@Ray, considera di scrivere una risposta a questa domanda, se hai trovato una soluzione, e accettala. Questo aiuterà altre persone con lo stesso problema.
— HitOdessit,

1
Ho avuto un problema ancora più cattivo. Si scopre che anche un reindirizzamento verrà caricato con il browser se non viene utilizzato un WebViewClient personalizzato.
— Jakob Weisblat,

Deve leggere questo - WebView lancia il browser
— Athira Reddy,

Ne parla anche questo ... youtube.com/watch?v=4bIF5In1c8s
— Athira Reddy,

Risposte:


799

Rispondere alla mia domanda in base ai suggerimenti di Maudicus e Hit.

Controlla il tutorial WebView qui . Basta implementare il client Web e impostarlo prima di loadUrl . Il modo più semplice è:

myWebView.setWebViewClient(new WebViewClient());

Per un'elaborazione più avanzata del contenuto Web, considera ChromeClient.


3
Per evitare che WebView avvii il browser predefinito quando si apre la pagina iniziale.
— Magno C

23
Grazie per questo incredibile incredibile piccolo pezzo di stregoneria! +1 ... MENO UNO PER TE, Android ...
— Josh,

Risposta eccellente. Risolto anche il mio problema.
— Omid1989

Funziona solo per il caricamento iniziale? Cosa succede se si desidera navigare nel browser dall'app?
— logicbloke,

5
myWebView.webViewClient = WebViewClient()a Kotlin!
— Thomas Pritchard,

98

Usa questo:

lWebView.setWebViewClient(new WebViewClient());

@DigvijaySingh controlla l'originale della risposta accettata. Inizialmente non aveva questo codice. È stato aggiunto molto dopo questa risposta
— Vladyslav Matviienko,

52

usare così:

@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

Rendi la tua attività così.

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 le vulnerabilità XSS nella tua app. Non utilizzarlo se non hai bisogno di JavaScript
— apex39

La linea che abilita JavaScript è molto importante, altrimenti otterrai You need to enable JavaScript to run this app.e googling rivelerà solo le persone che hanno problemi con reagire nativo e impazzirai perché JavaScript è già abilitato nelle impostazioni del browser.
— Jordan H,

19

Stavo affrontando lo stesso problema e ho trovato la soluzione Documentazione ufficiale di Android su WebView

Ecco il mio onCreateView()metodo e qui ho usato due metodi per aprire gli URL Il

metodo 1 sta aprendo l'URL nel browser e il

metodo 2 sta aprendo l'URL nel tuo WebView desiderato.
E sto usando il metodo 2 per la mia applicazione e questo è il mio codice:

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

Basta rispondere che puoi usare in questo modo

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

Prova questo codice ...

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

Se vedi una pagina vuota , abilita JavaScript.

webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.