WebView链接点击打开默认浏览器

问题描述 投票:0回答:7

现在我有一个加载网络视图的应用程序,并且所有点击都保存在应用程序内。我想做的是,当在应用程序中单击某个链接(例如,http://www.google.com)时,它会打开默认浏览器。如果有人有任何想法请告诉我!

android android-webview android-browser
7个回答
217
投票

我今天必须做同样的事情,我在 StackOverflow 上找到了一个非常有用的答案,我想在这里分享,以防其他人需要它。

来源(来自sven

webView.setWebViewClient(new WebViewClient(){
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url != null && (url.startsWith("http://") || url.startsWith("https://"))) {
            view.getContext().startActivity(
                new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            return true;
        } else {
            return false;
        }
    }
});

40
投票
WebView webview = (WebView) findViewById(R.id.webview);
webview.loadUrl(https://whatoplay.com/);

您不必包含此代码。

// webview.setWebViewClient(new WebViewClient());

请使用下面的代码。

webview.setWebViewClient(new WebViewClient()
{
  public boolean shouldOverrideUrlLoading(WebView view, String url)
  {
    String url2="https://whatoplay.com/";
     // all links  with in ur site will be open inside the webview 
     //links that start ur domain example(http://www.example.com/)
    if (url != null && url.startsWith(url2)){
      return false;
    } 
     // all links that points outside the site will be open in a normal android browser
    else
    {
      view.getContext().startActivity(
      new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
      return true;
    }
  }
});

14
投票

您只需添加以下行

yourWebViewName.setWebViewClient(new WebViewClient());

检查this以获取官方文档。


11
投票

您可以使用 Intent 来实现此目的:

Intent browserIntent = new Intent("android.intent.action.VIEW", Uri.parse("your Url"));
startActivity(browserIntent);

6
投票

您可以为此使用 Intent:

Uri uriUrl = Uri.parse("http://www.google.com/"); 
Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);  
startActivity(launchBrowser);  

3
投票

由于这是有关 WebView 中外部重定向的首要问题之一,因此这里有一个 Kotlin 上的“现代”解决方案:

webView.webViewClient = object : WebViewClient() {
        override fun shouldOverrideUrlLoading(
            view: WebView?,
            request: WebResourceRequest?
        ): Boolean {
            val url = request?.url ?: return false
            //you can do checks here e.g. url.host equals to target one
            startActivity(Intent(Intent.ACTION_VIEW, url))
            return true
        }
    }

0
投票

现在

public boolean shouldOverrideUrlLoading(WebView view, String url)
已被弃用并使用
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
,您可以在Java中使用以下代码:

private class MyWebViewClient extends WebViewClient {
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            if (Objects.equals(request.getUrl().toString(), "http://www.google.com/")) {
                Uri uri = request.getUrl();
                startActivity(new Intent(Intent.ACTION_VIEW, uri));
                return true;
            }
            else {
                return false;
            }
        }
    }

只需将 http://www.google.com/ 替换为您想要在网络浏览器而不是 webview 中打开的 URL。

© www.soinside.com 2019 - 2024. All rights reserved.