Android webview meluncurkan browser saat memanggil loadurl


473

Saya membuat sebuah Activityyang memiliki judul dan tampilan web di a LinearLayout. Dalam onResume()metode itu disebut webView.loadUrl(url). Masalahnya adalah bahwa aktivitas pertama-tama menunjukkan judul dengan sisa layar kosong, kemudian browser perangkat diluncurkan dengan halaman untuk URL. Yang ingin saya lihat adalah halaman yang ditunjukkan di WebViewbawah judul. Apa yang bisa menjadi masalah?

Sunting : Oke, lakukan pencarian lebih lanjut dan temukan yang ini:

Mengklik URL membuka browser default

Itu menunjuk ke WebViewtutorial di sini .

Cukup terapkan klien web dan atur.


Saya menyebutkan ini karena Anda memecahkan masalah saya ... Terima kasih.
Jesse Black

2
@ Ray, pertimbangkan menulis jawaban untuk pertanyaan ini, jika Anda telah menemukan solusi, dan menerimanya. Ini akan membantu orang lain dengan masalah yang sama.
HitOdessit

1
Saya memiliki masalah yang bahkan lebih buruk. Ternyata, bahkan pengalihan akan dimuat dengan browser jika WebViewClient kustom tidak digunakan.
Jakob Weisblat


Yang ini juga menceritakan tentang hal itu ... youtube.com/watch?v=4bIF5In1c8s
Athira Reddy

Jawaban:


799

Menjawab pertanyaan saya berdasarkan saran dari Maudicus dan Hit.

Lihat tutorial WebView di sini . Cukup terapkan klien web dan atur sebelum loadUrl . Cara paling sederhana adalah:

myWebView.setWebViewClient(new WebViewClient());

Untuk pemrosesan lebih lanjut untuk konten web, pertimbangkan ChromeClient.


3
Untuk menghindari WebView untuk meluncurkan browser default saat membuka halaman awal.
Magno C

23
Terima kasih untuk sepotong sihir yang luar biasa ini! +1 ... MINUS ONE FOR YOU, Android ...
Josh

Jawaban yang sangat bagus. Memecahkan masalah saya juga.
Omid1989

Apakah ini hanya berfungsi untuk pemuatan awal? Bagaimana jika Anda ingin menavigasi browser dari dalam aplikasi?
logicbloke

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

98

Gunakan ini:

lWebView.setWebViewClient(new WebViewClient());

@DigvijaySingh memeriksa yang asli dari jawaban yang diterima. Awalnya tidak memiliki kode ini. Itu ditambahkan jauh setelah jawaban ini
Vladyslav Matviienko

52

gunakan seperti ini:

@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

Jadikan Aktivitas Anda seperti ini.

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)memperkenalkan kerentanan XSS ke dalam aplikasi Anda. Jangan menggunakannya jika Anda tidak perlu JavaScript
apex39

Garis yang mengaktifkan JavaScript sangat penting jika tidak, Anda akan mendapatkannya You need to enable JavaScript to run this app.dan googling hanya akan mengungkapkan orang-orang yang memiliki masalah dengan reaksi asli dan Anda akan menjadi gila karena JavaScript sudah diaktifkan di pengaturan browser.
Jordan H

19

Saya menghadapi masalah yang sama dan saya menemukan solusi Dokumentasi resmi Android tentang WebView

Inilah onCreateView()metode saya dan di sini saya menggunakan dua metode untuk membuka url.

Metode 1 membuka url di Browser dan

Metode 2 membuka url di WebView yang Anda inginkan.
Dan saya menggunakan Metode 2 untuk Aplikasi saya dan ini adalah kode saya:

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

Cukup Jawab yang bisa Anda gunakan seperti ini

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

Coba kode ini ...

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

Jika Anda melihat halaman kosong , aktifkan JavaScript.

webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.