Webview尝试打开所有链接,但应在浏览器中打开

时间:2014-11-21 07:30:19

标签: java android webview hyperlink onclick

我正在使用webview,webview可能包含一个包含两种不同类型链接的网页。我想要的是,如果用户点击包含http://webpagename.com的链接,则应该在手机的浏览器中打开该链接。如果用户点击没有http://的第二类链接,则应将其重定向到新活动。现在正在发生的事情是,http://的链接在网页浏览和浏览器中都是开放的。但是,没有http://的链接显示网页不可用

在webview中处理onclick链接的代码:

// to know which link is clicked
            holder.webView.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url){
                    holder.webView.setWebViewClient(new WebViewClient() {
                        @Override
                        public WebResourceResponse shouldInterceptRequest (final WebView view, String url) {
                            if (url != null && url.startsWith("http://")) {
                                view.getContext().startActivity(
                                    new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                                return null;
                            }
                            else {
                            Log.e("URL: ", url);
                            System.out.println(url.replace(url.substring(0,url.lastIndexOf("/")+1), ""));
                            return null;
                            }
                        }

                        /**
                         * Return WebResourceResponse with CSS markup from a String. 
                         */

                    });

                    return super.shouldOverrideUrlLoading(view, url);
                }
            });

我应该怎么做才能确保http://链接始终在浏览器中打开,其他链接打开活动,但在网页视图中没有打开任何内容?

1 个答案:

答案 0 :(得分:1)

docs for WebViewClientshouldOverrideUrlLoading()方法:

  

<强>返回

     

如果主机应用程序想要离开当前的WebView并处理URL本身,则为true,否则返回false。

由于您正在处理WebView的内容并重定向到“活动”,因此此方法应显式返回true,而不是super方法的返回值。

根据您的说明和代码,您似乎无需覆盖shouldInterceptRequest()方法。

holder.webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url)
        {
            if (url != null && url.startsWith("http://"))
            {
                view.getContext().startActivity(
                    new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            }
            else
            {
                Log.e("URL: ", url);
                System.out.println(url.replace(url.substring(0, url.lastIndexOf("/") + 1), ""));
                // Start your app's Activity here
            }

            return true;
        }
    });