【问题标题】:WebView link click open default browserWebView 链接点击打开默认浏览器
【发布时间】:2011-05-12 21:13:47
【问题描述】:

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

【问题讨论】:

    标签: android android-webview android-browser


    【解决方案1】:

    由于这是有关 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
            }
        }
    

    【讨论】:

      【解决方案2】:
      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;
          }
        }
      });
      

      【讨论】:

        【解决方案3】:

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

        Source(来自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;
                }
            }
        });
        

        【讨论】:

        • 这个答案对我帮助很大!谢谢!
        • 请注意,如果 url 是相对的(不以“http://”开头),那么它将在应用程序内打开。为了避免这种情况,总是返回 true 并使相对 url 链接什么都不做。
        • 您应该检查前缀中的其他协议,例如 rtsp、https 等。如果链接旨在打开媒体,则应将其重定向到设备的媒体播放器。如果没有协议前缀,则识别并提供一个。
        • 确切地说,我正在搜索。谢谢
        • 请注意 shouldOverrideUrlLoading(WebView view, String url) 在 API 24 中已弃用。请检查 this answer。
        【解决方案4】:

        您只需要添加以下行

        yourWebViewName.setWebViewClient(new WebViewClient());
        

        查看this 获取官方文档。

        【讨论】:

          【解决方案5】:

          您可以为此使用 Intent:

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

          【讨论】:

            【解决方案6】:

            您可以为此使用 Intent:

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

            【讨论】:

            • 你应该使用 Intent.ACTION_VIEW
            猜你喜欢
            • 2012-06-11
            • 2011-07-26
            • 1970-01-01
            • 1970-01-01
            • 2015-11-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-08
            相关资源
            最近更新 更多