報錯:“位于:………………的網(wǎng)頁無法加載梨水,因為 net:ERR_UNKNOWN_URL_SCHEME”,前面就是無法打開的協(xié)議吃溅。
原因:
因為webview只能識別http, https這樣的協(xié)議括丁,其他自定義的協(xié)議webView無法識別,比如:抖音(snssdk1128://)枪萄、微信(weixin://)隐岛、去哪兒(qunaraphone://),就會報錯:ERR_UNKNOWN_URL_SCHEME瓷翻。
解決方法:
重寫WebViewClient中的shouldOverrideUrlLoading方法聚凹。加載網(wǎng)頁時會回調(diào)這個方法,可以在改方法中判斷和攔截非htpp和https的url的加載齐帚;返回值為boolean型妒牙,是true的時候控制去WebView打開,為false調(diào)用系統(tǒng)瀏覽器或第三方瀏覽器对妄。默認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://")) {
//以下跳轉(zhuǎn)到第三方app饥伊,如抖音
// Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
// startActivity(intent);
return true;
}
} catch (Exception e) {//防止crash (如果手機上沒有安裝處理某個scheme開頭的url的APP, 會導(dǎo)致crash)
return true;//沒有安裝該app時象浑,返回true,表示攔截自定義鏈接琅豆,但不跳轉(zhuǎn)愉豺,避免彈出上面的錯誤頁面
}
//如果有視頻或者別的url 可以在此處進行判斷處理
if (!TextUtils.isEmpty(url)) {
isVideo = url.contains("vedio");
}
//返回值是true的時候控制去WebView打開,為false調(diào)用系統(tǒng)瀏覽器或第三方瀏覽器
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});