Android中的WebView中加载非Http(s)的URL导致net::ERR_UNKNOWN_URL_SCHEME

   日期:2020-10-16     浏览:243    评论:0    
核心提示:最近开发遇到加载一个百度网盘的URL(加载的URL为https开头的),使用的是Android应用中WebView来加载实现的,就出现了net::ERR_UNKNOWN_URL_SCHEME的错误:如下图:一、出现的原因因为webview只能识别http, https这样的协议,像一些支付宝(alipays://)、微信(weixin://)、去哪儿(qunaraphone://),他们自定义的协议webView是无法识别的,因此就会出现:ERR_UNKNOWN_URL_SCHEME这样的错误。

最近开发遇到加载一个百度网盘的URL(加载的URL为https开头的),使用的是Android应用中WebView来加载实现的,就出现了net::ERR_UNKNOWN_URL_SCHEME的错误:如下图:

一、出现的原因

因为webview只能识别http, https这样的协议,像一些支付宝(alipays://)、微信(weixin://)、去哪儿(qunaraphone://),他们自定义的协议webView是无法识别的,因此就会出现:ERR_UNKNOWN_URL_SCHEME这样的错误。

一般会“位于:………………的网页无法加载,因为 net:ERR_UNKNOWN_URL_SCHEME”,在这里我们就可以看到无法打开的协议。

二、解决的方法为

给WebView设置WebViewClient,并重写WebViewClient中的shouldOverrideUrlLoading方法.
首先我们来了解下shouldOverrideUrlLoading(WebView view, String url)方法,该方法会在加载超链接时回调过来,所以通过重写shouldOverrideUrlLoading,可以实现对网页中超链接的拦截;返回值为boolean型,是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器。默认false

所以,我们可能在有的博文中看到不去重写该方法也可以解决ERR_UNKNOWN_URL_SCHEME这个错误。
这里我们讲下重写shouldOverrideUrlLoading来解决。

 webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url == null) return false;

                try{
                    if(!url.startsWith("http://") && !url.startsWith("https://")){
                        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,表示拦截自定义链接,但不跳转,避免弹出上面的错误页面
                }

                //下面的两种方式选择使用其中一种即可
                // TODO Auto-generated method stub
                //1:返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
                view.loadUrl(url);
                return true;
                //2:或者使用如下的加载方式:
                return super.shouldOverrideUrlLoading(view, url);
            }
        });

3:终极解决方案:

如果上述方法使用不行的话,直接在该界面的原生WebView替换成 腾讯定制版的WebView(com.tencent.smtt.sdk.WebView)

再次尝试基本可以解决。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服