(源碼)解決Android的WebView加載失敗(404咏删,500)惹想,顯示的自定義視圖,

好多朋友會在Android開發(fā)過程中遇到使用WebView加載html頁面出現(xiàn)404,500等錯(cuò)誤頁面督函,也有好多人想自定義這個(gè)錯(cuò)誤頁面嘀粱,但是在6.0之前激挪,大家覺得自定義錯(cuò)誤頁面就不好處理了;
之前一直使用在WebView加載時(shí)锋叨,根據(jù)onReceivedError() 判斷網(wǎng)頁是否加載成功垄分,然后做相應(yīng)的操作,但是最后發(fā)現(xiàn)娃磺,在一些情況下薄湿,html頁面加載失敗了,onReceivedError()方法卻并沒有執(zhí)行偷卧。
最后進(jìn)過努力豺瘤,想出了一個(gè)比較笨,但是我又覺得比較有效的方法涯冠。下面來給大家簡單說一說:
不知道大家發(fā)現(xiàn)沒有炉奴,在所有的加載錯(cuò)誤的html頁面中逼庞,html的標(biāo)題title可能都會包含錯(cuò)誤信息蛇更,比如說“error”,這樣的話我們就可以在這個(gè)html的標(biāo)題title上做文章了赛糟。

1.先給大家說說怎么獲取這個(gè)html的標(biāo)題title

(1).Android應(yīng)用開發(fā)的時(shí)候使用WebView這個(gè)組件的過程中可能會接觸到WebViewClient與WebChromeClient派任,那么這兩個(gè)類到底有什么不同呢

WebViewClient主要幫助WebView處理各種通知、請求事件的璧南,比如:

    onLoadResource
    onPageStart
    onPageFinish
    onReceiveError
    onReceivedHttpAuthRequest

WebChromeClient主要輔助WebView處理Javascript的對話框掌逛、網(wǎng)站圖標(biāo)、網(wǎng)站title司倚、加載進(jìn)度等比如
    onCloseWindow(關(guān)閉WebView)
    onCreateWindow()
    onJsAlert (WebView上alert無效豆混,需要定制WebChromeClient處理彈出)
    onJsPrompt
    onJsConfirm
    onProgressChanged
    onReceivedIcon
    onReceivedTitle

看上去他們有很多不同,實(shí)際使用的話动知,如果你的WebView只是用來處理一些html的頁面內(nèi)容皿伺,只用WebViewClient就行了,如果需要更豐富的處理效果盒粮,
比如JS鸵鸥、進(jìn)度條等,就要用到WebChromeClient丹皱。

(2).我們可以看到在 WebChromeClient 中有一個(gè)方法 onReceivedTitle() 妒穴,這個(gè)方法就是用來獲取html頁面的標(biāo)題title的回調(diào)。

2.我們在 WebChromeClient 中的 onReceivedTitle() 方法里判斷html頁面的標(biāo)題中是否含有 “error” 摊崭,如果有讼油,則證明html加載失敗,設(shè)置加載失敗的標(biāo)記呢簸,讓在 WebViewClient 的完成是回

調(diào)的 onPageFinish() 方法里顯示自定義的加載失敗的頁面**

代碼如下:

WebSettings webSettings = webView.getSettings();
 //設(shè)置WebView屬性矮台,能夠執(zhí)行Javascript腳本
 webSettings.setJavaScriptEnabled(true);
 //設(shè)置可以訪問文件
 webSettings.setAllowFileAccess(true);
 webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);


 webView.setWebViewClient(new WebViewClient() {
     @Override
     public boolean shouldOverrideUrlLoading(WebView view, String url) {
         view.loadUrl(url);
         return true;
     }

     /**
      * 網(wǎng)頁頁面開始加載的時(shí)候淆攻,執(zhí)行的回調(diào)方法
      * @param view
      * @param url
      * @param favicon
      */
     @Override
     public void onPageStarted(WebView view, String url, Bitmap favicon) {//網(wǎng)頁頁面開始加載的時(shí)候
         emptyView.setEmptyView(EmptyView.EMPTY_LOADING);//初始化一個(gè)顯示正在加載的視圖
         rl_detail.setVisibility(View.VISIBLE);
         rl_detail.removeAllViews();
         rl_detail.addView(emptyView);//在加載頁面開始的時(shí)候顯示一個(gè)正在加載的視圖,
         webView.setEnabled(false);// 當(dāng)加載網(wǎng)頁的時(shí)候?qū)⒕W(wǎng)頁進(jìn)行隱藏
         ll_container_btn.setVisibility(View.GONE);
         btn_collect.setVisibility(View.GONE);
         super.onPageStarted(view, url, favicon);
     }

     /**
      * 網(wǎng)頁加載結(jié)束的時(shí)候執(zhí)行的回調(diào)方法
      * @param view
      * @param url
      */
     @Override
     public void onPageFinished(WebView view, String url) {//網(wǎng)頁加載結(jié)束的時(shí)候
         if (!loadError) {//當(dāng)網(wǎng)頁加載成功的時(shí)候判斷是否加載成功
             rl_detail.setVisibility(View.GONE);//加載成功的話嘿架,則隱藏掉顯示正在加載的視圖瓶珊,顯示加載了網(wǎng)頁內(nèi)容的WebView
             webView.setEnabled(true);
             ll_container_btn.setVisibility(View.VISIBLE);
             btn_collect.setVisibility(View.VISIBLE);
         } else { //加載失敗的話,初始化頁面加載失敗的圖耸彪,然后替換正在加載的視圖頁面
             rl_detail.removeAllViews();
             emptyView.setEmptyView(EmptyView.EMPTY_EMPTY, "您找的頁面暫時(shí)走丟了...");
             rl_detail.addView(emptyView);
         }

     }


     /**
      * 頁面加載錯(cuò)誤時(shí)執(zhí)行的方法伞芹,但是在6.0以下,有時(shí)候會不執(zhí)行這個(gè)方法
      * @param view
      * @param errorCode
      * @param description
      * @param failingUrl
      */
     @Override
     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
         super.onReceivedError(view, errorCode, description, failingUrl);
         loadError = true;
     }


 });

 webView.setWebChromeClient(new WebChromeClient(){
     /**
      * 當(dāng)WebView加載之后蝉娜,返回 HTML 頁面的標(biāo)題 Title
      * @param view
      * @param title
      */
     @Override
     public void onReceivedTitle(WebView view, String title) {
         //判斷標(biāo)題 title 中是否包含有“error”字段唱较,如果包含“error”字段,則設(shè)置加載失敗召川,顯示加載失敗的視圖
       if(!TextUtils.isEmpty(title)&&title.toLowerCase().contains("error")){
           loadError = true;
       }
     }
 });
 webView.loadUrl(url);

源碼下載 源碼下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末南缓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子荧呐,更是在濱河造成了極大的恐慌汉形,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倍阐,死亡現(xiàn)場離奇詭異概疆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)峰搪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門岔冀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人概耻,你說我怎么就攤上這事使套。” “怎么了鞠柄?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵侦高,是天一觀的道長。 經(jīng)常有香客問我春锋,道長矫膨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任期奔,我火速辦了婚禮侧馅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呐萌。我一直安慰自己馁痴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布肺孤。 她就那樣靜靜地躺著罗晕,像睡著了一般济欢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上小渊,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天法褥,我揣著相機(jī)與錄音,去河邊找鬼酬屉。 笑死半等,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的呐萨。 我是一名探鬼主播杀饵,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谬擦!你這毒婦竟也來了切距?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤惨远,失蹤者是張志新(化名)和其女友劉穎谜悟,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锨络,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赌躺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了羡儿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,764評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡是钥,死狀恐怖掠归,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悄泥,我是刑警寧澤虏冻,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站弹囚,受9級特大地震影響厨相,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鸥鹉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一蛮穿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧毁渗,春花似錦践磅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羔飞。三九已至,卻和暖如春檐春,著一層夾襖步出監(jiān)牢的瞬間逻淌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工疟暖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恍风,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓誓篱,卻偏偏與公主長得像朋贬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子窜骄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容