zoukankan      html  css  js  c++  java
  • 安卓app的webView加载网页后出现ERR_UNKNOWN_URL_SCHEME

    进来开发需要,欲于app中加入百度地图导航功能,然时间紧迫,遂以嵌入网页为先。

    然在使用webView加载网页过程中,遇到了如上问题,显示ERR_UNKNOWN_URL_SCHEME

    不知何故之下,学网上删去webView.setWebViewClient(new WebViewClient(){...},并加上webView.setWebChromeClient(new WebChromeClient());的确可以正确显示了,但是尝试后,发现点击链接会自动跳转手机浏览器,而不继续在这儿显示了,这显然不是我所希望的。

    但是想让网页只在我的webview内跳转,而不要跑到手机浏览器去了,那么就需要用到如下代码:

    webView.setWebViewClient(new WebViewClient(){
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }); 

    是的,这正是前面删掉的嘛,而且只要加了这东西,即便加上webView.setWebChromeClient(new WebChromeClient()); 也是无用,一样的报错。

    难道无解了吗?不不不,上述方法既不治标也不治本,而真正治本的方法如下:

    首先我们观察一下错误显示:
    这里写图片描述

    发现了吗,位于baidumap://xxx 的网页无法加载,明明输入的是http://xxx 为何变成了这个开头?
    这是因为其自定义了scheme,类似的还有alipays://weixin:// 等等。而webView只能识别http://https://开头的url,因此才会报此错。
    想处理也很简单,对于这种自定义scheme的url单独处理即可。
    以我的baidumap://为例,修改代码如下:

    webView.setWebViewClient(new WebViewClient(){
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
    
                    try{
                        if(url.startsWith("baidumap://")){
                            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                            startActivity(intent);
                            return true;
                        }
                    }catch (Exception e){
                        return false;
                    }
                    webView.loadUrl(url);
                    return true;
                }
            });

    另外那个webView.setWebChromeClient(new WebChromeClient()); 得删去啦。
    上述是只针对以baidumap:// 开头的scheme,如果当前页面显示的网站是固定的,那么也如此操作即可,而如果需要做成一个类似浏览器的形式,只需判断开头是否是http://https:// ,如若不是,则将上面的try...catch中代码复制进去,删去if判断即可。


    这里写图片描述



    欢迎大家加入QQ群一起交流讨论,「吟游」程序人生——YinyouPoet

  • 相关阅读:
    网页编码就是那点事
    .NetCore通过EFCore操作数据库
    我的第一个.netcore程序
    VisoStudio 允许局域网联机调试网站
    MVC 中使用扩展方法
    MVC 简单发送邮件示例
    ASP.NET MVC路由配置
    SQL 存储过程语句拼接愁人的时间类型
    生成并返回 json 结果文件
    Windows Live Writer配置测试
  • 原文地址:https://www.cnblogs.com/yinyoupoet/p/13287532.html
Copyright © 2011-2022 走看看