android WebView加载h5网站嵌到淘宝链接页面报错问题

WebView加载h5网站嵌到淘宝链接页面报错问题

android混合开发,使用WebView嵌套h5网站。在h5
网站中放了一个按钮。点击按钮会打开第三方链接。如:淘宝,京东,拼多多等。这时候app就会报一个错误。图如下:
android WebView加载h5网站嵌到淘宝链接页面报错问题
淘宝的就是taobao://什么的,京东,类似。

解决方案:
网上好多的解读是说要让webview使用WebChromeClient这种方式。
但是我自己的已经是这个模式了。问题还没解决。后来我又想到问题是点击按钮出现。页面好像不归webview管

直到后来看到https://www.jianshu.com/p/119823e5cfb5 简书上这位作者写 的。webview就好像是我们浏览器,虽然按钮打开页面的操作是在h5里面的,但是所有的请求都会经过webview,一些特殊的请求如“淘宝,京东” 他们打开以后页面会自动执行一个唤起手机app的链接。这个链接不是http打头的。浏览器不能识别就会报错。
这时候就需要过滤请求。

    //拦截请求。过滤特殊请求。
    public WebViewClient webViewClient = new WebViewClient() {

        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {

            // 不要使用super,否则有些手机访问不了,因为包含了一条 handler.cancel()
            // super.onReceivedSslError(view, handler, error);

            // 接受所有网站的证书,忽略SSL错误,执行访问网页
            handler.proceed();
        }
        @Override
        public boolean shouldOverrideUrlLoading(WebView wv, String url) {
            if(url == null) return false;

            try {
                if(url.startsWith("weixin://") //微信
                        || url.startsWith("alipays://") //支付宝
                        || url.startsWith("mailto://") //邮件
                        || url.startsWith("tel://")//电话
                        || url.startsWith("dianping://")//大众点评
                        || url.startsWith("tbopen://")//淘宝
                        || url.startsWith("openapp.jdmobile://")//淘宝
                        || url.startsWith("tmast://")//淘宝

                    //其他自定义的scheme
                        ) {
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(intent);
                    return true;
                }
            } catch (Exception e) { //防止crash (如果手机上没有安装处理某个scheme开头的url的APP, 会导致crash)
                return true;//没有安装该app时,返回true,表示拦截自定义链接,但不跳转,避免弹出上面的错误页面
            }

            //处理http和https开头的url
            wv.loadUrl(url);
            return true;
        }



    };

记得在webview中setWebViewClient

        webView=(WebView)findViewById(R.id.web_view);
        //加载url
        webView.loadUrl(url);
        //添加请求拦截
        webView.setWebViewClient(webViewClient);

新手小白,个人总结记录。轻喷。