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.