博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android webview 自定义404错误页面!
阅读量:6360 次
发布时间:2019-06-23

本文共 3581 字,大约阅读时间需要 11 分钟。

hot3.png

自定义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界面就要两个并用了。

代码如下:

 

 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                             @Override16                             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或其他服务器会返回其他的错误信息,这个我也要意义检测,不光慢,也不科学。

本人经验有限,技术拙漏,薄文仅供参考。欢迎批评指正 

转载于:https://my.oschina.net/u/1777508/blog/306417

你可能感兴趣的文章
2fsk调制解调原理框图_数字调制解调输出什么 数字调制解调输出特点介绍【图文】...
查看>>
查看mysql某人执行了什么语句_一条 SQL 语句是如何在 MySQL 中执行的
查看>>
r 选取从小到大的数据_r 选取数据库
查看>>
geant4构造粒子_Geant4 基础5——Geant4粒子源
查看>>
python 论文插图_插图论文
查看>>
es6 混合commjs_前端模块化——CommonJS、ES6规范
查看>>
6379端口恶意扫描_DNS重绑定的利用:端口扫描与绕过同源策略
查看>>
mysql reset_mysql的reset命令
查看>>
mysql选择utf 8编码_MySQL支持UTF-8编码全攻略
查看>>
阿里云服务器web项目启动连接mysql_在腾讯云&阿里云上部署JavaWeb项目(Tomcat+MySQL)...
查看>>
mysql 非英文_非英文网站如何使用MySQL的字符集
查看>>
lua mysql 字符串截取_Lua 截取字符串(截取utf-8格式字符串)
查看>>
基于物品的协同过滤mysql_百万用户,八十万商品,如何计算基于物品的协同过滤...
查看>>
在mysql中如何添加函数库_详细讲解如何为MySQL数据库添加新函数
查看>>
sar偏移量追踪技术_SAR指标配合阶段高低价的量化交易策略
查看>>
ssm集成mysql_idea+SSM+Mysql框架整合
查看>>
gitee添加成员_成员权限管理,到底能有多精细?
查看>>
mysql 并发性_MySQL 事务
查看>>
mysql 8 配置参数优化_MySQL性能优化之参数配置
查看>>
mysql集合查询的命令_MySQL数据库常用命令集合
查看>>