【问题标题】:Open external links in the browser with android webview使用 android webview 在浏览器中打开外部链接
【发布时间】:2021-06-12 22:50:25
【问题描述】:

我有这个代码,但不是因为它有效,它一直在 webview 中打开,我想要的是链接不属于我在默认浏览器中打开的网站。任何想法?谢谢

private class CustomWebViewClient extends WebViewClient {
        @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
              if(url.contains("message2space.es.vu")){
                view.loadUrl(url);
                return true;
            }else{
                return super.shouldOverrideUrlLoading(view, url);
            }

            }
        }

【问题讨论】:

    标签: android browser webview hyperlink external


    【解决方案1】:
     webView.setWebViewClient(new WebViewClient()   {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    
                    if((String.valueOf(request.getUrl())).contains("paramedya.com.tr")) {
                        view.loadUrl(String.valueOf(request.getUrl()));
                    } else {
                        Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());
                        view.getContext().startActivity(intent);
                    }
    
                    return true;
                }
            });
    

    【讨论】:

      【解决方案2】:

      由于 API 级别 24 shouldOverrideUrlLoading(WebView view, String url) 已弃用。

      最新解决方案:

          webView.setWebViewClient(new WebViewClient() {
              @Override
              public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                  Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());
                  view.getContext().startActivity(intent);
                  return true;
              }
          });
      

      【讨论】:

      • 太棒了,这很有魅力。这非常简单,因为它不涉及覆盖WebView。也许@Jaumesv 可以使它成为新的例外答案,将其清楚地固定在顶部......
      • Request.getUrl() 具有最低 SDK 21 要求。
      【解决方案3】:

      这是非常甜蜜和简短的解决方案

      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String url) {
          Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
          context.startActivity(i);
          return true;
      }
      

      【讨论】:

        【解决方案4】:

        问题是您需要将Intent 发送到默认网络浏览器才能打开链接。您所做的只是在您的 Webview 中调用不同的方法来处理链接。每当您希望另一个应用程序处理您需要使用 Intents 的事情时。试试这个代码。

        private class CustomWebViewClient extends WebViewClient {
                @Override
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {
                      if(url.contains("message2space.es.vu")) {
                        view.loadUrl(url);
                      } else {
                        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                        startActivity(i);
                      }
                      return true;
                    }
                }
        

        【讨论】:

        • 我们可以在 webview 链接上设置长点击监听器吗?
        • 现在我已经做到了。但是应用程序崩溃,因为一些 ActivityNotFoundException。
        • @superUser 你应该提出你自己的问题。
        • @TheOnlyAnil 你应该提出你自己的问题。
        • shouldOverrideUrlLoading 已弃用。
        猜你喜欢
        • 2015-12-09
        • 2014-07-12
        • 2018-02-11
        • 2017-08-06
        • 1970-01-01
        • 2013-08-13
        • 2012-09-24
        • 2019-11-23
        相关资源
        最近更新 更多