Android Webview startet den Browser beim Aufruf von loadurl


473

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

Edit : Ok, habe weiter gesucht und dieses gefunden:

Durch Klicken auf URLs wird der Standardbrowser geöffnet

Es verweist auf das WebViewTutorial hier .

Implementieren Sie einfach den Webclient und legen Sie ihn fest.


Ich erwähne das, weil du mein Problem gelöst hast ... Danke.
Jesse Black

2
@ Ray, schreiben Sie eine Antwort auf diese Frage, wenn Sie eine Lösung gefunden haben, und akzeptieren Sie sie. Dies wird anderen Menschen mit dem gleichen Problem helfen.
HitOdessit

1
Ich hatte ein noch schlimmeres Problem. Es stellt sich heraus, dass sogar eine Umleitung mit dem Browser geladen wird, wenn kein benutzerdefinierter WebViewClient verwendet wird.
Jakob Weisblat


Dieser erzählt auch davon ... youtube.com/watch?v=4bIF5In1c8s
Athira Reddy

Antworten:


799

Beantwortung meiner Frage basierend auf den Vorschlägen von Maudicus und Hit.

Überprüfen Sie das WebView-Tutorial hier . Implementieren Sie einfach den Webclient und legen Sie ihn vor loadUrl fest . Der einfachste Weg ist:

myWebView.setWebViewClient(new WebViewClient());

Berücksichtigen Sie für eine erweiterte Verarbeitung des Webinhalts den ChromeClient.


3
Um zu vermeiden, dass WebView beim Öffnen der ersten Seite den Standardbrowser startet.
Magno C

23
Danke für dieses unglaublich tolle kleine Stück Hexerei! +1 ... MINUS ONE FÜR SIE, Android ...
Josh

Hervorragende Antwort. Mein Problem wurde auch gelöst.
Omid1989

Funktioniert dies nur beim erstmaligen Laden? Was ist, wenn Sie innerhalb der App im Browser navigieren möchten?
Logicbloke

5
myWebView.webViewClient = WebViewClient()in Kotlin!
Thomas Pritchard

98

Benutze das:

lWebView.setWebViewClient(new WebViewClient());

@DigvijaySingh Überprüfen Sie das Original der akzeptierten Antwort. Ursprünglich hatte es diesen Code nicht. Es wurde weit nach dieser Antwort hinzugefügt
Vladyslav Matviienko

52

Verwendung wie folgt:

@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

Machen Sie Ihre Aktivität so.

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)führt XSS-Schwachstellen in Ihre App ein. Verwenden Sie es nicht, wenn Sie kein JavaScript benötigen
apex39

Die Zeile, die JavaScript aktiviert, ist sehr wichtig, da Sie sonst beim You need to enable JavaScript to run this app.Googeln nur Personen aufdecken, die Probleme mit der Reaktion auf Native haben, und verrückt werden, da JavaScript bereits in den Browsereinstellungen aktiviert ist.
Jordan H

19

Ich hatte das gleiche Problem und fand die Lösung für die offizielle Dokumentation von Android zu WebView

Hier ist meine onCreateView()Methode und hier habe ich zwei Methoden verwendet, um die URLs zu öffnen.

Methode 1 öffnet die URL im Browser und

Methode 2 öffnet die URL in Ihrem gewünschten WebView.
Und ich verwende Methode 2 für meine Anwendung und dies ist mein Code:

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

Einfach antworten können Sie 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");
   }
}

6

Versuchen Sie diesen Code ...

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

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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.