日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android webview 加载进度和自定义404错误页面

發(fā)布時間:2024/4/17 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android webview 加载进度和自定义404错误页面 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原帖地址:http://www.cnblogs.com/winxiang/archive/2012/10/25/2738320.html

自定義404頁面。android的webview 控件可以加載網(wǎng)頁,webview有兩個方法:webView.setWebChromeClient和webView.setWebViewClient。

WebChromeClient主要處理解析,渲染網(wǎng)頁等瀏覽器做的事情,輔助WebView處理Javascript的對話框,網(wǎng)站圖標,網(wǎng)站title,加載進度:?
  onCloseWindow(關閉WebView)?
  onCreateWindow()?
  onJsAlert (WebView上alert是彈不出來東西的,需要定制你的WebChromeClient處理彈出)?
  onJsPrompt?
  onJsConfirm?
  onProgressChanged?
  onReceivedIcon?
  onReceivedTitle

比如可以添加進度條,使得界面更友好。

WebViewClient是幫助WebView處理各種通知、請求事件的,具體來說包括:?

  onLoadResource?
  onPageStart?
  onPageFinish?
  onReceiveError?//這個就是我們想要的方法
  onReceivedHttpAuthRequest?

那么我們要加載自定義的404界面就要兩個并用了。

代碼如下:

?

1 webView = (WebView) findViewById(R.id.webv);//獲取控件 2 webView.getSettings().setJavaScriptEnabled(true); //設置js權限,比如js彈出窗,你懂得 3 webView.getSettings().setSupportMultipleWindows(true); 4 5 webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 6 7 webView.setWebChromeClient(new MyWebChromeClient() 8 { 9 public void onProgressChanged(WebView view, int progress)//設置 加載進程 10 { 11 activity.setTitle("正在加載...Loading..."); 12 activity.setProgress(progress * 100); 13 if(progress >= 100){ 14 new Thread(new Runnable() { 15 @Override 16 public void run() { 17 Message msg=handler.obtainMessage();//發(fā)送通知,加入線程 18 msg.what=2;//加載完成 19 handler.sendMessage(msg);//通知發(fā)送! 20 } 21 }).start(); 22 activity.setTitle(R.string.app_name); 23 } 24 } 25 } 26 ); 27 28 webView.setWebViewClient(new WebViewClient() { 29 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) 30 { 31 view.stopLoading(); 32 view.clearView(); 33 Message msg=handler.obtainMessage();//發(fā)送通知,加入線程 34 msg.what=1;//通知加載自定義404頁面 35 handler.sendMessage(msg);//通知發(fā)送! 36 } 37 public boolean shouldOverrideUrlLoading(WebView view, String url) 38 { 39 view.loadUrl(url); 40 return true; 41 } 42 }); 43 webView.addJavascriptInterface(this, "javatojs");//將本activity綁定到java_js這個js當中去 44 webView.loadUrl(URL); 45 checkUPPay();//檢測銀聯(lián)支付控件是否已添加 46 } 47 /** 48 * handler處理消息機制 49 */ 50 protected Handler handler = new Handler(){ 51 public void handleMessage(Message message){ 52 switch (message.what) { 53 case 0: 54 myDialog.show(); 55 break; 56 case 1: 57 webView.loadUrl(URL404); 58 break; 59 case 2: 60 myDialog.dismiss(); 61 break; 62 } 63 } 64 };

說明:雖說這兩個方法都是系統(tǒng)內置方法,但是連用起來還是會出現(xiàn)短暫的跳轉,跳轉的一瞬間會看到原有的404錯誤頁面。我了解過其他文章的分析,部分文章認為這是因為webview加載頁面是通過兩個線程進行的,所以當我們收到錯誤消息的時候另外一個線程可能就將原先的頁面顯示出來了。所以會有一點“閃”。

在使用這個方法之前我也想過其他的加載自定義界面,比如在頁面加載到大于99%的時候,我檢測webview的title,如果是null或“未找到頁面(不同的手機可能提示的不一樣)”就跳轉到自定義的錯誤界面,同樣也會出現(xiàn)短暫的閃出原404界面。

當我找到文章剛開始的方法之后果斷把這個方法舍去了,因為不同手機的提示是不一樣的,而且有時候tomcat或其他服務器會返回其他的錯誤信息,這個我也要意義檢測,不光慢,也不科學。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的android webview 加载进度和自定义404错误页面的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。