Android webview, loadurl çağrıldığında tarayıcıyı başlattı


473

Bir oluşturulan Activitybir başlık ve bir bir web görünümü olduğunu LinearLayout. İn onResume()yöntemi olarak adlandırdığı webView.loadUrl(url). Sorun, etkinliğin ilk olarak başlığı ekranın geri kalanıyla boş göstermesi, ardından cihaz tarayıcısının URL sayfasıyla başlatılmasıdır. Görmek istediğim WebView, başlığın altında gösterilen sayfadır . Sorun ne olabilir?

Düzenleme : Tamam, biraz daha arama yaptı ve bunu buldu:

URL'leri tıkladığınızda varsayılan tarayıcı açılır

Bu işaret WebViewöğretici burada .

Sadece web istemcisini uygulayın ve ayarlayın.


Bundan bahsediyorum çünkü sorunumu çözdün ... Teşekkürler.
Jesse Black

2
@Ray, bir çözüm bulduysanız bu soruya bir cevap yazmayı düşünün ve kabul edin. Bu, aynı sorunu olan diğer insanlara yardımcı olacaktır.
HitOdessit

1
Daha acayip bir sorunum vardı. Özel bir WebViewClient kullanılmadığında tarayıcı ile bir yönlendirme bile yüklenecektir.
Jakob Weisblat


Bu da bunu anlatıyor ... youtube.com/watch?v=4bIF5In1c8s
Athira Reddy

Yanıtlar:


799

Maudicus ve Hit'in önerilerine dayanarak sorumu cevaplıyorum.

WebView eğitimini buradan kontrol edin . Sadece web istemcisini uygulayın ve loadUrl'den önce ayarlayın . En basit yol:

myWebView.setWebViewClient(new WebViewClient());

Web içeriği için daha gelişmiş işlemler için ChromeClient'i göz önünde bulundurun.


3
İlk sayfayı açtığınızda WebView'ın varsayılan tarayıcıyı başlatmasını önlemek için.
Magno C

23
Bu inanılmaz harika küçük büyücülük parçası için teşekkürler! +1 ... EKSİK BİR SİZİN İÇİN, Android ...
Josh

Mükemmel cevap. Sorunumu da çözdüm.
Omid1989

Bu sadece ilk yükleme için mi çalışır? Uygulama içinden tarayıcıda gezinmek isterseniz ne olur?
logicbloke

5
myWebView.webViewClient = WebViewClient()Kotlin
Thomas Pritchard

98

Bunu kullan:

lWebView.setWebViewClient(new WebViewClient());

@ DigvijaySingh kabul edilen cevabın orijinalini kontrol edin. Başlangıçta bu kodu yoktu. Bu cevaptan sonra yol eklendi
Vladyslav Matviienko

52

şöyle kullanın:

@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

Faaliyetinizi böyle yapın.

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)uygulamanıza XSS güvenlik açıklarını tanıtır. JavaScript'e ihtiyacınız yoksa kullanmayın
apex39

JavaScript'i etkinleştiren satır çok önemlidir, aksi takdirde alırsınız You need to enable JavaScript to run this app.ve googling, yalnızca yerel tepkiyle ilgili sorunları olan kişileri ortaya çıkarır ve tarayıcı ayarlarında JavaScript zaten etkin olduğundan çıldırırsınız.
Ürdün H

19

Aynı sorunla karşılaşıyordum ve Android'in WebView ile ilgili resmi Belgelerini buldum

İşte benim onCreateView()yöntem ve burada urls açmak için iki yöntem kullanılır

Yöntem 1 url Tarayıcıda açıyor ve

Yöntem 2 url istediğiniz WebView açıyor.
Ve benim Uygulama için Yöntem 2 kullanıyorum ve bu benim kod:

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

Basitçe Cevapla böyle kullanabilirsiniz

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

Bu kodu deneyin ...

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

Boş bir sayfa görürseniz JavaScript'i etkinleştirin.

webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.