WebView加载网页出错:ERR_UNKNOWN_URL_SCHEME

一、原因

03-03 18:22:30.897  2808  2808 I chromium: [INFO:CONSOLE(1)] "this.methodName", source: https://sm.bdimg.com/static/wiseindex/amd_modules/@baidu/wise-invoke-app_e2c3758.js (1)
03-03 18:22:30.956  2808  2808 D BrowserActivity: Notify Tab Changed: 0
03-03 18:22:30.960  2808  2808 W System.err: java.net.URISyntaxException: Expected scheme-specific part at index 13: baiduboxlite:
03-03 18:22:30.965  2808  2808 W System.err:     at java.net.URI$Parser.fail(URI.java:2875)
03-03 18:22:30.965  2808  2808 W System.err:     at java.net.URI$Parser.failExpecting(URI.java:2881)
03-03 18:22:30.966  2808  2808 W System.err:     at java.net.URI$Parser.parse(URI.java:3084)
03-03 18:22:30.966  2808  2808 W System.err:     at java.net.URI.<init>(URI.java:583)
03-03 18:22:30.966  2808  2808 W System.err:     at acr.browser.lightning.utils.Utils.getDomainName(Utils.java:209)
03-03 18:22:30.967  2808  2808 W System.err:     at acr.browser.lightning.activity.BrowserActivity.updateUrl(BrowserActivity.java:1471)
03-03 18:22:30.967  2808  2808 W System.err:     at acr.browser.lightning.view.LightningWebClient.onPageFinished(LightningWebClient.java:96)
03-03 18:22:30.969  2808  2808 W System.err:     at com.android.webview.chromium.WebViewContentsClientAdapter.onPageFinished(WebViewContentsClientAdapter.java:199)
03-03 18:22:30.969  2808  2808 W System.err:     at org.chromium.android_webview.AwContentsClientCallbackHelper$MyHandler.handleMessage(AwContentsClientCallbackHelper.java:72)
03-03 18:22:30.969  2808  2808 W System.err:     at android.os.Handler.dispatchMessage(Handler.java:106)
03-03 18:22:30.969  2808  2808 W System.err:     at android.os.Looper.loop(Looper.java:164)
03-03 18:22:30.969  2808  2808 W System.err:     at android.app.ActivityThread.main(ActivityThread.java:6494)
03-03 18:22:30.969  2808  2808 W System.err:     at java.lang.reflect.Method.invoke(Native Method)
03-03 18:22:30.970  2808  2808 W System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
03-03 18:22:30.971  2808  2808 W System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
03-03 18:22:30.979  2808  2808 D BrowserActivity: Notify Tab Changed: 0

 

因为webview只能识别http, https这样的协议,像一些微信(weixin://)、去哪儿(qunaraphone://),百度(baiduboxlite://),他们自定义的协议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;

                // TODO Auto-generated method stub
                //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
                view.loadUrl(url);
                return true;
            }
        });
 


版权声明:本文为slaughteryou原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。