精华内容
下载资源
问答
  • 产生原因 首先来说下 webview重定向,其定义没有明确的官方解释,发生的原因是请求的链接(url)... 关于 net::ERR_UNKNOWN_URL_SCHEME(如下图所示),因为webview只能识别http和https协议,遇到图中这种"wvhzpj:/...

     

    产生原因

     

           首先来说下 webview重定向,其定义没有明确的官方解释,发生的原因是请求的链接(url)在加载完成后发生了变化 (eg.比如你的代码中设置webview加载的是网页A,打开后发现加载的是网页B); 关于 net::ERR_UNKNOWN_URL_SCHEME (如下图所示),因为webview只能识别http和https协议,遇到图中这种"wvhzpj://"开头的自定义协议时就无法识别,便会提示ERR_UNKNOWN_URL_SCHEME这样的错误。

     

     

    如何解决

     

           需要重写WebviewClient类中的 shouldOverriderUrlLoading 方法( 选取方法参数为(Webview view , String url )的那种,如下图),该方法可以对webview将要加载的url 进行处理,我们在此处对 会发生重定向的 url 不以 "http://"、"https//" 开头的自定义协议 进行拦截处理。该方法的返回值为boolean 类型,表示是否阻止webview继续加载url,默认值为 false。当返回false,表示不进行阻止,webview认为当前的url需要进行处理,会继续加载;返回 true,表示阻止webview继续加载url,等待我们进行处理。

           那么如何判断 webview 将要加载的url会不会发生重定向呢?WebView中有个静态类 HitTestResult,这个类中有一些被 final 修饰的 int 变量,这些变量表示webview加载的url所属的网页类型。还有两个get方法 getType() getExtra() , getType() 表示获取加载url的网页类型; getExtra() 表示根据url打开的网页类型,返回一个extra信息,如果打开类型为 UNKNOWN_TYPE(打开的内容未知) ,此时 url 就会通过requestFocusNodeHref(Message)方法异步重定向,则extra就没有返回值,为null。经过上面分析,我们可以对getType() 和 getExtra() 获取到的返回值进行判断,当 getType()==0 (打开内容未知) 或者 getExtra() 为 null 时,就认为webview加载的url会发生重定向,我们此时就在shouldOverriderUrlLoading方法中对其进行处理。

    下表为上图 HitTestResult 类中变量值所对应打开的网页类型

      

    好的,我们接下来看看如何判定加载的url是非 http/https 的自定义协议。很简单,对shouldOverriderUrlLoading方法中的参数 String url进行判断,url.startsWith("http://")||url.startsWith("https://") 即表示加载的url是 http/https 协议,不对其进行拦截处理,反之则进行拦截处理。(见下图)

     

     

    解决方案

     

           下面贴出我在代码中关于网页重定向和加载自定义协议链接的解决方案,我对会发生重定向和自定义协议的网址进行拦截,调用手机系统浏览器打开网页(我没有获取将要重定向url的最终加载地址,比较麻烦,有便捷方式的朋友可以留言指出)。博主集成的是腾讯X5webview,和webview用法是一样的。该注释说明的地方我尽量标注了,仅供参考,直接复制粘贴需要替换webview控件和Content,请自行处理。

    @Override
    public boolean shouldOverrideUrlLoading(final WebView view, final String url) {

        WebView.HitTestResult hit = view.getHitTestResult();
        //hit.getExtra()为null或者hit.getType() == 0都表示即将加载的URL会发生重定向,需要做拦截处理
        if (TextUtils.isEmpty(hit.getExtra()) || hit.getType() == 0) {
            //通过判断开头协议就可解决大部分重定向问题了,有另外的需求可以在此判断下操作
            Log.e("重定向", "重定向: " + hit.getType() + " && EXTRA()" + hit.getExtra() + "------");
            Log.e("重定向", "GetURL: " + view.getUrl() + "\n" +"getOriginalUrl()"+ view.getOriginalUrl());
            Log.d("重定向", "URL: " + url);
        }

        if (url.startsWith("http://") || url.startsWith("https://")) { //加载的url是http/https协议地址
            view.loadUrl(url);
            return false; //返回false表示此url默认由系统处理,url未加载完成,会继续往下走

        } else { //加载的url是自定义协议地址
            try {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                context.startActivity(intent);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return true;
        }

    }

     

     

    此外,webview在加载的url为下载链接时需要再做下处理,需要用到 setDownloadListener() 方法,在回调监听中设置当打开的url为下载链接时调用手机浏览器打开下载链接。

    /**
     * setDownloadListener()是对加载的url是下载地址时的回调
     */
    tencentWeb.setDownloadListener(new DownloadListener() {
        @Override
        public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
    
            // 上面的参数中,url对应文件下载地址,mimetype对应下载文件的MIME类型
            Intent intent = new Intent(Intent.ACTION_VIEW);
            Uri uri = Uri.parse(url);
            intent.addCategory(Intent.CATEGORY_BROWSABLE);
            intent.setData(uri);
            context.startActivity(intent);
        }
    });
    


    关于webview更多的探索博主仍在探寻中,本文有不对的地方欢迎指出

     

     

     

    展开全文
  • 最近开发遇到加载一个百度网盘的URL(加载的URL为https开头的),使用的是Android应用中WebView来加载实现的,就出现了net::ERR_UNKNOWN_URL_SCHEME的错误:如下图: 一、出现的原因 因为webview只能识别http, ...

    最近开发遇到WebView中加载一个百度网盘的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)

    再次尝试基本可以解决。

    展开全文
  • 提示:Webview 遇到net::ERR_UNKNOWN_URL_SCHEME 错误 mWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { ...

    问题描述:

    提示:Webview 遇到net::ERR_UNKNOWN_URL_SCHEME 错误

    mWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            return super.shouldOverrideUrlLoading(view, request);
        }
    });

    原因分析:

    提示:webView仅支持http://和https://协议,不支持自定义协议


    解决方案:

    提示:

    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            WebView.HitTestResult hit = view.getHitTestResult();
             //hit.getExtra()为null或者hit.getType() == 0都表示即将加载的URL会发生重定向,需要做拦截处理
            if (TextUtils.isEmpty(hit.getExtra()) || hit.getType() == 0) {
        
            }
              //加载的url是http/https协议地址
            if (request.getUrl().getScheme().startsWith("http://") || request.getUrl().getScheme().startsWith("https://")){
                view.loadUrl(request.getUrl().toString());
                return false;
            }else{
              //加载的url是自定义协议地址
                try {
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(request.getUrl().toString()));
                    Main1Activity.this.startActivity(intent);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return true;
            }
        }
    
    });

    在这里插入图片描述

    展开全文
  • 报错描述:在 Android 原生 App 中使用 WebView 调用 H5 SDK,使用支付宝网页(alipay...**** 处的网页不能载入为: net::ERR_UNKNOWN_URL_SCHEME.报错原因:在 Android WebView 中只能打开以 http / https 开头的 URL...

    报错描述:

    在 Android 原生 App 中使用 WebView 调用 H5 SDK,使用支付宝网页(alipay_wap)渠道时,出现找不到网页 alipays://platformapi/startApp?**** 处的网页不能载入为: net::ERR_UNKNOWN_URL_SCHEME.

    报错原因:

    在 Android WebView 中只能打开以 http / https 开头的 URL

    解决方案:

    需要打开第三方 App 的 URL,只能拦截该 URL,并使用 Intent 的方式来打开第三方 App。如:在 shouldOverrideUrlLoading(WebView view, String url)方法中拦截 url:@Override public boolean shouldOverrideUrlLoading(WebView view, String url) {

    if(url.startsWith("alipays://platformapi/startApp")){

    intent.setData(Uri.parse(url));

    startActivity(intent);

    return true;

    }

    return super.shouldOverrideUrlLoading(view, url);}

    展开全文
  • WebView加载出现net::err_unknown_url_scheme

    千次阅读 2019-08-08 15:50:09
    加载百度出现百度首页显示一会出现net::err_unknown_url_scheme 解决方式:https://blog.csdn.net/qq_41188773/article/details/89669354
  • Delphi Android WebBrowser 加载自定义scheme报错net::ERR_UNKNOWN_URL_SCHEME 解决方法:实现WebBrowser1ShouldStartLoadWithRequest事件,过滤掉非http\https开头的url。 procedure TForm1.WebBrowser1...
  • 错误代码:net::ERR_UNKNOWN_URL_SCHEME

    万次阅读 2018-04-24 11:11:11
    今天又个需求,通过tomcat...最后看控制台报错为net::ERR_UNKNOWN_URL_SCHEME.看了下我的路径为localhost:8080/maps/xx/xx/xx.png.最后找到的问题是没有加入"http://"这个头,因此访问不到.加上就正常咯~...
  • 发现webview 加载天猫店铺时会报net::ERR_UNKNOWN_URL_SCHEME; 很奇怪,会报SCHEME识别不了的问题; 问题排查: 先来看下整个加载过程的日志: 2021-03-19 16:25:30.957 11786-11786/xxxxxxx.xxxxxxx.android_...
  • 产生原因:webview重定向,其定义没有明确的官方解释,发生... 关于net::ERR_UNKNOWN_URL_SCHEME(如下图所示),因为webview只能识别http和https协议,遇到图中这种"wvhzpj://"开头的自定义协议时就无法识别,便会提...
  • 遇到这种情况找不到网页net::ERR_UNKNOWN_URL_SCHEME //加上它就OK了 webView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0"); ...
  • 使用ckplayer 插件播放视频在chrome 浏览器下报 net::err_unknown_url_scheme 错误的解决方法项目是做音视频直播的,为了降低延时性,在pc 端采用了还是使用flash 播放器播放视频的解决方案。但是在chrome 浏览器下 ...
  • 上面代码url因为缺少http://,所以在chrome浏览器中会出现Failed to load resource: net::ERR_UNKNOWN_URL_SCHEME的问题,只要在前面加上就能解决这个问题。这样就能正常访问了
  • 如果你在webview里面,死活都...第一步,请你在模拟器跑一遍, 报错是:net::ERR_UNKNOWN_URL_SCHEME 复制这段代码就OK WebViewClient webViewClient = new WebViewClient() { @Override public boolean shouldOverr
  • I am getting "net::ERR_UNKNOWN_URL_SCHEME" while calling a telephone number option from an HTML page in Android. Do I need to add any permission(s) in the manifest to get this working? I haven't added
  • 在项目中设置了api请求和web页面请求的地址,如下图: 控制台报错,如下图: 问题是:没有加入"http://"这个头,因此访问不到. 解决办法: 再次访问正常
  • 咱们先看下报错结果图: ...,网页出来后才出现这个错误页面,原因是加载的这个url内部有JavaScript代码里面包含自定义scheme代码导致加载这个JavaScript代码里面的自定义scheme的时候就报错无法加载。 ...
  • WebView出现net::ERR_UNKNOWN_URL_SCHEME错误

    万次阅读 2018-06-04 22:01:56
    参考链接:https://www.jianshu.com/p/119823e5cfb51.问题分析最近app中集成了一个大众点评的外链,但跳转到“商户详情”... 如果url是自定义协议(如: tel, weixin, alipays 等等)开头的, 就url转换成原生调用(inte...
  • 原因electron 4.x开始后的安全策略,不识别file:///开始的url 解决方案:main.js中,加入 function createWindow () { /** * Initial window options */ mainWindow = new BrowserWindow({ height: 768, ...
  • WebViewClient webViewClient = new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView wv, String url) { ... if(url.startsWith("weixin://") || url.startsWith("alip.
  • 原因是因为唯品会的网页会重定向到另一个地址,该地址不是"http"或"https"开头的,而是像这样的"hwfastapp://",于是如果WebViewClient错误重写了以下方法,便会报错net::ERR_UNKNOWN_URL_SCHEME。  @Override ...
  • 好好的url ,一切正常,利用webview 展示,展示出来1~3秒后就跳出这个错,后来找到方法了,记录下 setWebChromeClient(new WebChromeClient()); setWebViewClient(new WebViewClient(){ @Override public ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 860
精华内容 344
关键字:

net::err_unknown_url_scheme