Webview Android khởi chạy trình duyệt khi gọi loadurl


473

Tôi đã tạo một Activitycái có tiêu đề và chế độ xem web trong một LinearLayout. Trong onResume()phương thức nó gọi webView.loadUrl(url). Vấn đề là hoạt động đầu tiên hiển thị tiêu đề với phần còn lại của màn hình, sau đó trình duyệt thiết bị được khởi chạy cùng với trang cho URL. Những gì tôi muốn thấy là trang được hiển thị ở WebViewbên dưới tiêu đề. Điều gì có thể là vấn đề?

Chỉnh sửa : Ok, đã thực hiện một số tìm kiếm thêm và tìm thấy cái này:

Nhấp vào URL sẽ mở trình duyệt mặc định

Nó chỉ vào WebViewhướng dẫn ở đây .

Chỉ cần thực hiện các máy khách web và thiết lập nó.


Tôi đề cập đến điều này bởi vì bạn đã giải quyết vấn đề của tôi ... Cảm ơn bạn.
Jesse Black

2
@Ray, xem xét viết một câu trả lời cho câu hỏi này, nếu bạn đã tìm ra giải pháp và chấp nhận nó. Điều này sẽ giúp những người khác có cùng vấn đề.
HitOdessit

1
Tôi đã có một vấn đề thậm chí còn khó khăn hơn. Hóa ra, ngay cả một chuyển hướng sẽ tải với trình duyệt nếu WebViewClient tùy chỉnh không được sử dụng.
Jakob Weisblat

Phải đọc điều này - WebView khởi chạy trình duyệt
Athira Reddy

Điều này cũng nói về nó ... youtube.com/watch?v=4bIF5In1c8s
Athira Reddy

Câu trả lời:


799

Trả lời câu hỏi của tôi dựa trên những gợi ý từ Maudicus và Hit.

Kiểm tra hướng dẫn WebView tại đây . Chỉ cần thực hiện ứng dụng web và đặt nó trước loadUrl . Cách đơn giản nhất là:

myWebView.setWebViewClient(new WebViewClient());

Để xử lý nâng cao hơn cho nội dung web, hãy xem xét ChromeClient.


3
Để tránh WebView khởi chạy trình duyệt mặc định khi mở trang ban đầu.
Magno C

23
Cảm ơn vì mảnh phù thủy nhỏ tuyệt vời không thể tin được này! +1 ... MỘT LẦN CHO BẠN, Android ...
Josh

Câu trả lời tuyệt vời. Giải quyết vấn đề của tôi quá.
Omid1989

Điều này chỉ làm việc cho tải ban đầu? Nếu bạn muốn điều hướng trình duyệt từ trong ứng dụng thì sao?
logicbloke

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

98

Dùng cái này:

lWebView.setWebViewClient(new WebViewClient());

@DigvijaySingh kiểm tra bản gốc của câu trả lời được chấp nhận. Ban đầu nó không có mã này. Nó đã được thêm vào sau câu trả lời này
Vladyslav Matviienko

52

sử dụng như thế này:

@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

Làm cho hoạt động của bạn như thế này.

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)giới thiệu lỗ hổng XSS vào ứng dụng của bạn. Không sử dụng nó nếu bạn không cần JavaScript
apex39

Dòng kích hoạt JavaScript là cực kỳ quan trọng nếu không, bạn sẽ nhận được You need to enable JavaScript to run this app.và googling nó sẽ chỉ tiết lộ những người gặp vấn đề với phản ứng tự nhiên và bạn sẽ phát điên vì JavaScript đã được bật trong cài đặt trình duyệt.
Jordan H

19

Tôi đã phải đối mặt với cùng một vấn đề và tôi đã tìm thấy giải pháp Tài liệu chính thức của Android về WebView

Đây là onCreateView()phương pháp của tôi và ở đây tôi đã sử dụng hai phương pháp để mở url

Phương thức 1 đang mở url trong Trình duyệt và

Phương pháp 2 là mở url trong WebView mong muốn của bạn.
Và tôi đang sử dụng Phương pháp 2 cho Ứng dụng của mình và đây là mã của tôi:

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

Trả lời đơn giản bạn có thể sử dụng như thế này

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

Hãy thử mã này ...

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

Nếu bạn thấy một trang trống , hãy bật JavaScript.

webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.