报错:“位于:………………的网页无法加载,因为 net:ERR_UNKNOWN_URL_SCHEME”,前面就是无法打开的协议。
原因:
因为webview只能识别http, https这样的协议,其他自定义的协议webView无法识别,比如:抖音(snssdk1128://)、微信(weixin://)、去哪儿(qunaraphone://),就会报错:ERR_UNKNOWN_URL_SCHEME。
解决方法:
重写WebViewClient中的shouldOverrideUrlLoading方法。加载网页时会回调这个方法,可以在改方法中判断和拦截非htpp和https的url的加载;返回值为boolean型,是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器。默认false。
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url == null) return false;
Log.e("shouldOverrideUrl", "shouldOverrideUrlLoading: "+url);
try {
// 拦截非http和https的url的加载,否则会报错:ERR_UNKNOWN_URL_SCHEME
if (!url.startsWith("http://") && !url.startsWith("https://")) {
//以下跳转到第三方app,如抖音
// 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,表示拦截自定义链接,但不跳转,避免弹出上面的错误页面
}
//如果有视频或者别的url 可以在此处进行判断处理
if (!TextUtils.isEmpty(url)) {
isVideo = url.contains("vedio");
}
//返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});