调用loadurl时,Android Webview启动浏览器


473

我创建了一个Activity具有标题和Web视图的LinearLayout。在onResume()方法中调用webView.loadUrl(url)。问题在于活动首先显示标题,其余屏幕为空白,然后启动设备浏览器并显示URL页面。我想看到的是WebView标题下方显示的页面。可能是什么问题呢?

编辑:好的,做了一些进一步的搜索,找到了这个:

单击URL将打开默认浏览器

它指向此处WebView教程。

只需实现Web客户端并进行设置即可。


我提到这个是因为您解决了我的问题...谢谢。
杰西·布莱克

2
@Ray,如果找到了解决方案,请考虑为这个问题写一个答案,并接受它。这将帮助其他有相同问题的人。
HitOdessit 2012年

1
我有一个更棘手的问题。事实证明,如果不使用自定义WebViewClient ,则即使重定向也将加载到浏览器中。
雅各布·韦斯布拉特2013年

必须阅读此内容
-WebView

这其中也讲述了吧... youtube.com/watch?v=4bIF5In1c8s
Athira雷迪

Answers:


798

根据Maudicus和Hit的建议回答我的问题。

此处查看WebView教程。只需实现Web客户端并在loadUrl之前进行设置 即可。最简单的方法是:

myWebView.setWebViewClient(new WebViewClient());

要对网络内容进行更高级的处理,请考虑使用ChromeClient。


3
为了避免WebView在打开初始页面时启动默认浏览器。
Magno C

23
感谢这个令人难以置信的超棒小巫术!+1 ...为您减一,Android ...
2015年

极好的答案。也解决了我的问题。
Omid1989年

这仅适用于初始加载吗?如果要从应用程序内浏览浏览器怎么办?
–logicbloke

5
myWebView.webViewClient = WebViewClient()在科特林!
Thomas Pritchard


52

像这样使用:

@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

使您的活动像这样。

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)在您的应用中引入XSS漏洞。如果您不需要JavaScript,请不要使用它
apex39 '18

启用JavaScript的这一行非常重要,否则您会发现You need to enable JavaScript to run this app.并进行谷歌搜索只会发现人们对本机反应有问题,并且您会发疯,因为浏览器设置中已经启用了JavaScript。
约旦H

19

我遇到了同样的问题,并且找到了解决方案 Android的有关WebView的官方文档

这是我的onCreateView()方法,在这里我用了两种方法打开url。

方法1是在浏览器中打开url,

方法2是在所需的WebView中打开url。
我正在为我的应用程序使用方法2,这是我的代码:

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

简单回答,您可以像这样使用

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

试试这个代码...

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

如果看到空白页,请启用JavaScript。

webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.