537 Stimmen

Android-Webview startet den Browser, wenn loadURL aufgerufen wird

Ich habe eine Activity erstellt, die einen Titel und eine Webansicht in einem LinearLayout hat. In der Methode onResume() ruft es webView.loadUrl(url) auf. Das Problem ist, dass die Aktivität zuerst den Titel mit dem restlichen Bildschirm leer anzeigt, dann wird der Browser des Geräts mit der Seite für die URL gestartet. Was ich sehen möchte, ist die Seite, die unter dem Titel in der WebView angezeigt wird. Was könnte das Problem sein?

Bearbeiten: Ok, habe weitere Recherchen angestellt und dies gefunden:

Klicken von URLs öffnet Standardbrowser

Es verweist auf das WebView Tutorial hier.

Einfach den Web-Client implementieren und einstellen.

0 Stimmen

Ich erwähne dies, weil Sie mein Problem gelöst haben... Danke.

2 Stimmen

@Ray, erwäge, eine Antwort auf diese Frage zu schreiben, wenn du eine Lösung gefunden hast, und akzeptiere sie. Dies wird anderen Personen mit demselben Problem helfen.

1 Stimmen

Ich hatte sogar ein noch schlimmeres Problem. Es stellt sich heraus, dass selbst eine Weiterleitung im Browser geladen wird, wenn kein benutzerdefinierter WebViewClient verwendet wird.

10voto

CoolMind Punkte 21914

Wenn Sie eine leere Seite sehen, aktivieren Sie JavaScript.

webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);

8voto

code_geek Punkte 163

Probieren Sie diesen Code aus...

private void startWebView(String url) {

    // Erstellen eines neuen WebView-Clients zur Anzeige eines Fortschrittsdialogs
    // Beim Öffnen einer URL oder beim Klicken auf einen Link

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

        // Wenn Sie diese Methode nicht verwenden, werden URL-Links in einem neuen Browser geöffnet, nicht im WebView
        public boolean shouldOverrideUrlLoading(WebView view, String url) {              
            view.loadUrl(url);
            return true;
        }

        // Loader beim Laden der URL anzeigen
        public void onLoadResource (final WebView view, String url) {
            if (progressDialog == null) {
                // Im Standardfall YourActivity.this
                progressDialog = new ProgressDialog(view.getContext());
                progressDialog.setMessage("Laden...");
                progressDialog.show();
            }
        }
        public void onPageFinished(WebView view, String url) {
            try{
            if (progressDialog.isShowing()) {
                progressDialog.dismiss();
                progressDialog = null;
            }
            }catch(Exception exception){
                exception.printStackTrace();
            }
        }

    }); 

     // JavaScript im WebView aktiviert
    webView.getSettings().setJavaScriptEnabled(true); 

    // Weitere Optionen für das WebView
    /*
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.setScrollbarFadingEnabled(false);
    webView.getSettings().setBuiltInZoomControls(true);
    */

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

    // URL im WebView laden
    webView.loadUrl(url);
}

6voto

Einfach beantworten Sie können es so verwenden

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");
   }
}

2voto

Vishal Naikawadi Punkte 204

Wenn Sie webChromeClient verwenden, empfehle ich Ihnen, webChromeClient und webViewClient zusammen zu verwenden, da webChromeClient nicht shouldOverrideUrlLoading bereitstellt. Es ist in Ordnung, beide zu verwenden.

        webview.webViewClient = WebViewClient()
        webview.webChromeClient = Callback()

private inner class Callback : WebChromeClient() {
        override fun onProgressChanged(view: WebView?, newProgress: Int) {
            super.onProgressChanged(view, newProgress)

            if (newProgress == 0) {
                progressBar.visibility = View.VISIBLE
            } else if (newProgress == 100) {
                progressBar.visibility = View.GONE
            }
        }

    }

0 Stimmen

Verdammt, es ist mir nicht einmal in den Sinn gekommen, beide zu verwenden. Ich benutze onPageFinished() von WebViewClient und onConsoleMessage() von WebChromeClient. Danke!

1voto

Florian T Punkte 93

Ich habe gerade herausgefunden, dass es vom Format der URL abhängt:

Mein Code verwendet einfach

webview.loadUrl(url)

es ist nicht notwendig einzustellen

webView.setWebViewClient(new WebViewClient())

zumindest in meinem Fall. Vielleicht ist das für einige von euch nützlich.

0 Stimmen

Es öffnet sich immer noch im Browser mit dem Ende / nicht korrekter Antwort..

2 Stimmen

Tatsächlich erlebe ich das gleiche Verhalten. Bin mir nicht sicher, wie ich es erklären soll, aber das ist auch das, was ich sehe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X