最近開發遇到加載一個百度網盤的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)
再次嘗試基本可以解決,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/177405.html
標籤:python
上一篇:Android開發MVVM設計模式的實作及ButterKnife兼容結合原始碼詳解并總結優缺點
下一篇:android studio報java.lang.NoSuchMethodError: com.intellij.ide.plugins.PluginManagerCore解決辦法
