一、原因
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;
}
});