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

标签 java android webview hyperlink onclick

我有一个 WebView ,该 WebView 可能包含一个带有两种不同类型链接的网页。我想要的是,如果用户单击包含 http://webpagename.com 的链接,它应该在手机浏览器中打开该链接。如果用户单击没有 http:// 的第二种类型的链接,他应该被重定向到一个新的 Activity 。现在正在发生的事情是,带有 http:// 的链接在 WebView 和浏览器中都打开了。但是,没有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:// 链接始终在浏览器中打开,而其他链接打开一个 Activity 但在 webview 中什么也没有打开?

最佳答案

来自docs for WebViewClient , shouldOverrideUrlLoading() 方法:

Returns

True if the host application wants to leave the current WebView and handle the url itself, otherwise return false.

由于您正在处理 WebView 的内容和到 Activity 的重定向,因此此方法应显式返回 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;
        }
    });

关于java - Webview尝试打开所有链接,但应该在浏览器中打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27056247/

相关文章:

android - WebViewClient.shouldOverrideUrlLoading 给出无效的 url

java - 无法理解数十亿行上的 INSERT 更新计数

java - Spring Boot Controller 错误

java - Spock 中最终类的模拟实例在测试和开发代码中的行为不同

android - 无法选择单选按钮

javascript - Android - JavaScript 接口(interface)在 android 3.0 中不起作用

android - 检查url是否被缓存webview android

java - Android SqLite : Select Rows Where Values Exists in Another Database Table

java - 如何一键停止两个可运行程序?

java - 如何从firebase存储获取imageUrl并存储在firebase实时数据库中?