android webview 自定义404错误页面!
2015-07-30 14:46
369 查看
自定义404页面。android的webview 控件可以加载网页,webview有两个方法:webView.setWebChromeClient和webView.setWebViewClient。
WebChromeClient主要处理解析,渲染网页等浏览器做的事情,辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度:
onCloseWindow(关闭WebView)
onCreateWindow()
onJsAlert (WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出)
onJsPrompt
onJsConfirm
onProgressChanged
onReceivedIcon
onReceivedTitle
比如可以添加进度条,使得界面更友好。
WebViewClient是帮助WebView处理各种通知、请求事件的,具体来说包括:
onLoadResource
onPageStart
onPageFinish
onReceiveError //这个就是我们想要的方法
onReceivedHttpAuthRequest
那么我们要加载自定义的404界面就要两个并用了。
代码如下:
说明:虽说这两个方法都是系统内置方法,但是连用起来还是会出现短暂的跳转,跳转的一瞬间会看到原有的404错误页面。我了解过其他文章的分析,部分文章认为这是因为webview加载页面是通过两个线程进行的,所以当我们收到错误消息的时候另外一个线程可能就将原先的页面显示出来了。所以会有一点“闪”。
在使用这个方法之前我也想过其他的加载自定义界面,比如在页面加载到大于99%的时候,我检测webview的title,如果是null或“未找到页面(不同的手机可能提示的不一样)”就跳转到自定义的错误界面,同样也会出现短暂的闪出原404界面。
当我找到文章刚开始的方法之后果断把这个方法舍去了,因为不同手机的提示是不一样的,而且有时候tomcat或其他服务器会返回其他的错误信息,这个我也要意义检测,不光慢,也不科学。
WebChromeClient主要处理解析,渲染网页等浏览器做的事情,辅助WebView处理Javascript的对话框,网站图标,网站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();//发送通知,加入线程 18 msg.what=2;//加载完成 19 handler.sendMessage(msg);//通知发送! 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();//发送通知,加入线程 34 msg.what=1;//通知加载自定义404页面 35 handler.sendMessage(msg);//通知发送! 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();//检测银联支付控件是否已添加 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 };
说明:虽说这两个方法都是系统内置方法,但是连用起来还是会出现短暂的跳转,跳转的一瞬间会看到原有的404错误页面。我了解过其他文章的分析,部分文章认为这是因为webview加载页面是通过两个线程进行的,所以当我们收到错误消息的时候另外一个线程可能就将原先的页面显示出来了。所以会有一点“闪”。
在使用这个方法之前我也想过其他的加载自定义界面,比如在页面加载到大于99%的时候,我检测webview的title,如果是null或“未找到页面(不同的手机可能提示的不一样)”就跳转到自定义的错误界面,同样也会出现短暂的闪出原404界面。
当我找到文章刚开始的方法之后果断把这个方法舍去了,因为不同手机的提示是不一样的,而且有时候tomcat或其他服务器会返回其他的错误信息,这个我也要意义检测,不光慢,也不科学。
相关文章推荐
- Android ORM 框架之 ActiveAndroid
- 【从零学习openCV】IOS7根据人脸检测
- IOS 读取本地plist类型文件数据
- 爱加密加密Android apk 使用步骤
- Android Volley学习1---简介及基本用法
- 微软发布独立Android模拟器 为开发者提供测试
- unity, surface shader access world position and localposition
- 移动开发-Android-tab效果之Fragment-1
- Android 分析工具 APKAnalyser
- 提高iOS开发效率的方法和工具
- android开发中有EditText,当输入时输入法会把底部的导航栏顶上去。如何解决?
- Low-rank approximations
- Low-rank approximations
- 【分享】迅为iTOP4412开发板-Android系统屏幕旋转设置
- IOS开发教程--如何使用点9图片
- 【转】Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- Unity中uGUI的多分辨率处理
- android实现在Edittext中把部分字符隐藏
- Android官方命令深入分析之dmtracedump
- Android官方命令深入分析之dmtracedump