Android WebView 开发详解(二)
转载请注明出处 http://blog.csdn.net/typename/article/details/39495409powered by miechal zhao
概览:
Android WebView 做为承载网页的载体控件,他在网页显示的过程中会产生一些事件,并回调给我们的应用程序,以便我们在网页加载过程中做应用程序想处理的事情。比如说客户端需要显示网页加载的进度、网页加载发生错误等等事件。 WebView提供两个事件回调类给应用层,分别为WebViewClient,WebChromeClient开发者可以继承这两个类,接手相应事件处理。WebViewClient 主要提供网页加载各个阶段的通知,比如网页开始加载onPageStarted,网页结束加载onPageFinished等;WebChromeClient主要提供网页加载过程中提供的数据内容,比如返回网页的title,favicon等。
1.WebViewClient的基本使用
- classMyAndroidWebViewClientextendsWebViewClient {
- @Override
- publicvoidonPageStarted(WebView view, String url, Bitmap favicon) {
- // TODO
- }
- @Override
- publicvoidonPageFinished(WebView view, String url) {
- // TODO
- }
- }
- webview.setWebViewClient(newMyAndroidWebViewClient ());
2.WebViewClient API详解
- publicbooleanshouldOverrideUrlLoading(WebView view, String url)
当加载的网页需要重定向的时候就会回调这个函数告知我们应用程序是否需要接管控制网页加载,如果应用程序接管,并且return true意味着主程序接管网页加载,如果返回false让webview自己处理。
- publicvoidonPageStarted(WebView view, String url, Bitmap favicon)
当内核开始加载访问的url时,会通知应用程序,对每个main frame这个函数只会被调用一次,页面包含iframe 或者framesets 不会另外调用一次onPageStarted,当网页内内嵌的frame 发生改变时也不会调用onPageStarted。
- publicvoidonPageFinished(WebView view, String url)
当内核加载完当前页面时会通知我们的应用程序,这个函数只有在main frame情况下才会被调用,当调用这个函数之后,渲染的图片不会被更新,如果需要获得新图片的通知可以使用@link WebView.PictureListener#onNewPicture。
- publicvoidonLoadResource(WebView view, String url)
通知应用程序WebView即将加载url 制定的资源
- publicWebResourceResponse shouldInterceptRequest(WebView view,
- String url)
通知应用程序内核即将加载url制定的资源,应用程序可以返回本地的资源提供给内核,若本地处理返回数据,内核不从网络上获取数据。
- publicvoidonReceivedError(WebView view,interrorCode,
- String description, String failingUrl)
当浏览器访问制定的网址发生错误时会通知我们应用程序,比如网络错误。
@param errorCode 错误号可以在WebViewClient.ERROR_* 里面找到对应的错误名称。
- publicvoidonFormResubmission(WebView view, Message dontResend,
- Message resend)
如果浏览器需要重新发送POST请求,可以通过这个时机来处理。默认是不重新发送数据。
@param dontResent 当浏览器不需要重新发送数据时,可以使用这个参数。
- publicvoiddoUpdateVisitedHistory(WebView view, String url,
- booleanisReload)
通知应用程序可以将当前的url存储在数据库中,意味着当前的访问url已经生效并被记录在内核当中。这个函数在网页加载过程中只会被调用一次。注意网页前进后退并不会回调这个函数。
@param url 当前正在访问的url
- publicvoidonReceivedSslError(WebView view, SslErrorHandler handler,
- SslError error)
当网页加载资源过程中发现SSL错误会调用此方法。我们应用程序必须做出响应,是取消请求handler.cancel(),还是继续请求handler.proceed();内核的默认行为是handler.cancel();
@param handler 处理用户请求的对象。
- publicvoidonReceivedHttpAuthRequest(WebView view,
- HttpAuthHandler handler, String host, String realm)
通知应用程序WebView接收到了一个Http auth的请求,应用程序可以使用supplied 设置webview的响应请求。默认行为是cancel 本次请求。
@param handler 用来响应WebView请求的对象
- publicbooleanshouldOverrideKeyEvent(WebView view, KeyEvent event)
提供应用程序同步一个处理按键事件的机会,菜单快捷键需要被过滤掉。如果返回true,webview不处理该事件,如果返回false, webview会一直处理这个事件,因此在view 链上没有一个父类可以响应到这个事件。默认行为是return false;
@param event 键盘事件名
- publicvoidonScaleChanged(WebView view,floatoldScale,floatnewScale)
通知应用程序webview 要被scale。应用程序可以处理改事件,比如调整适配屏幕。
- publicvoidonReceivedLoginRequest(WebView view, String realm,
- String account, String args)
通知应用程序有个自动登录的帐号过程
4. WebChromeClient API详解
- publicvoidonProgressChanged(WebView view,intnewProgress)
通知应用程序当前网页加载的进度。
- publicvoidonReceivedTitle(WebView view, String title)
当document 的title变化时,会通知应用程序
@param title document新的title
- publicvoidonReceivedIcon(WebView view, Bitmap icon)
当前页面有个新的favicon时候,会回调这个函数。
@param icon 当前页面的favicon
- publicvoidonReceivedTouchIconUrl(WebView view, String url,
- booleanprecomposed)
@param url apple-touch-icon 的服务端地址
- publicvoidonShowCustomView(View view, CustomViewCallback callback)
通知应用程序webview需要显示一个custom view,主要是用在视频全屏HTML5Video support。
- publicvoidonHideCustomView()
退出视频通知
- publicbooleanonCreateWindow(WebView view,booleanisDialog,
- booleanisUserGesture, Message resultMsg)
请求创建一个新的窗口,如果我们应用程序接管这个请求,必须返回true,并且创建一个新的webview来承载主窗口。
- privatevoidcreateWindow(finalMessage msg) {
- WebView.WebViewTransport transport = (WebView.WebViewTransport) msg.obj;
- finalTab newTab = mWebViewController.openTab(null, Tab.this,true,
- true);
- transport.setWebView(newTab.getWebView());
- msg.sendToTarget();
- }
- publicvoidonRequestFocus(WebView view)
webview请求得到focus,发生这个主要是当前webview不是前台状态,是后台webview。
- publicvoidonCloseWindow(WebView window)
通知应用程序从关闭传递过来的webview并从view tree中remove。
- publicbooleanonJsAlert(WebView view, String url, String message,
- JsResult result)
通知应用程序显示javascript alert对话框,如果应用程序返回true内核认为应用程序处理这个消息,返回false,内核自己处理。
@param url 当前请求弹出javascript 对话框webview 加载的url地址。
- publicbooleanonJsConfirm(WebView view, String url, String message,
- JsResult result)
通知应用程序提供confirm 对话框。
- publicbooleanonJsPrompt(WebView view, String url, String message,
- String defaultValue, JsPromptResult result)
通知应用程序显示一个prompt对话框。
- publicbooleanonJsBeforeUnload(WebView view, String url, String message,
- JsResult result)
通知应用程序显示一个对话框,让用户选择是否离开当前页面,这个回调是javascript中的onbeforeunload事件,如果客户端返回true,内核会认为客户端提供对话框。默认行为是return false。
- publicvoidonExceededDatabaseQuota(String url, String databaseIdentifier,
- longquota,longestimatedDatabaseSize,longtotalQuota,
- WebStorage.QuotaUpdater quotaUpdater)
通知应用程序webview内核web sql 数据库超出配额,请求是否扩大数据库磁盘配额。默认行为是不会增加数据库配额。
- publicvoidonReachedMaxAppCacheSize(longrequiredStorage,longquota,
- WebStorage.QuotaUpdater quotaUpdater)
通知应用程序内核已经到达最大的appcache。
- publicvoidonGeolocationPermissionsShowPrompt(String origin,
- GeolocationPermissions.Callback callback)
当前页面请求是否允许进行定位。
- publicvoidonGeolocationPermissionsHidePrompt()
- publicvoidopenFileChooser(ValueCallback<Uri> uploadFile, String acceptType, String capture)
这个回调是私有回调, 当页面需要请求打开系统的文件选择器,则会回调这个方法,比如我们需要上传图片,请求拍照,邮件的附件上传等等操作。
Android WebView 开发详解(二)相关推荐
- Android openGl开发详解(二)
https://zhuanlan.zhihu.com/p/35192609 Android openGl开发详解(二)--通过SurfaceView,TextureView,GlSurfaceView ...
- Android openGl开发详解(二)——通过SurfaceView,TextureView,GlSurfaceView显示相机预览(附Demo)
最近公司在做自定义相机这一块,之前使用的是第三方,后来需求变更,第三方不支持添加动态贴纸,所以只能自己扩展.当然网上有很多例子,但是关于添加动态贴纸的例子几乎找不到,反正我是没找到(欲哭无泪).当然, ...
- Android WebView 开发详解(一)
转载请注明出处 http://blog.csdn.net/typename/article/details/39030091 powered by meichal zhao 概览: Android ...
- Android WebView 开发详解(三)
转载请注明出处 http://blog.csdn.net/typename/article/details/40302351 powered by miechal zhao 概览 Android ...
- 全志 android 编译,全志Android SDK编译详解(二)
注意要确定安装了jdk) 第一步: cd lichee; ./build.sh -p sun5i_elite -k 3.0 (apt-get install uboot-mkimage需要安装m ...
- android开发照相机啊,Android照相机开发详解(一)
Android相机开发详解(一) Android相机开发详解(一) 请支持原创,尊重原创,转载请注明出处:http://blog.csdn.net/kangweijian(来自kangweijian的 ...
- Android USB 开发详解
Android USB 开发详解 先附上 Android USB 官方文档 Android通过两种模式支持各种 USB 外设和 Android USB 附件(实现Android附件协议的硬件):USB ...
- Android相机开发详解(一)
Android相机开发详解(一) 请支持原创,尊重原创,转载请注明出处:http://blog.csdn.net/kangweijian(来自kangweijian的csdn博客) Android相机 ...
- 《Android游戏开发详解》——第1章,第1.6节函数(在Java中称为“方法”更好)...
本节书摘来自异步社区<Android游戏开发详解>一书中的第1章,第1.6节函数(在Java中称为"方法"更好),作者 [美]Jonathan S. Harbour,更 ...
最新文章
- js运动动画的八个知识点
- 【异常(待解决)】org.apache.http.NoHttpResponseException: api.weixin.qq.com:443 failed to respond...
- 苏宁易购唱共享之歌,共享干衣、共享数据、共享快递盒为哪般?
- android dialog activity 窗口全透明,Android Dialog形式的Activity
- [原创]java WEB学习笔记18:java EE 中的MVC 设计模式(理论)
- web 端可交互的离线渲染器,求 star~
- 如何查询Linux软件安装源,Zypper——suse软件查询 安装 升级 与 软件源编辑
- Windows的CRT中的setlocale()
- 2021年南京市高考成绩查询,2021年南京高考各高中成绩及本科升学率数据排名及分析...
- 后缀–ize_英语常用后缀-ize
- mysql blob 读取 图片_mysql中以blob形式存储的图片文件 通过ajax方式传输 在js中设置成img控件的src...
- PHP中mq是什么,MQ是什么
- 电脑版微信小程序全屏显示方法,手机横屏方法。
- 学python大数据培训
- kestrel虚拟服务器,如何使Kestrel Web服务器监听非本地主机的请求?
- 《C++Primer》学习笔记(6-10章)
- 第47章 QR-Decoder-OV5640二维码识别—零死角玩转STM32-F429系列
- 基于STC89C52RC模块的巡线小车
- 光刻胶剥离和光掩模清洁的工艺顺序
- 5.2JVM生命周期以及类加载
热门文章
- php 循环curl,PHP实现的curl批量请求操作示例
- angularjs 让当前路由重新加载_Spring Cloud Gateway的动态路由怎样做?集成Nacos实现很简单...
- 网站接入QQ登录最新2020 java版本
- DocKer linux Centos 安装DocKer 只需要十步
- 二叉树的中序遍历—leetcode94
- FreeBSD挂截U盘和光盘
- Android代码片段:设备信息
- /MD, /MDD, /ML, /MT,/MTD(使用运行时库)
- #1398 : 网络流五·最大权闭合子图
- TCP滑动窗口和拥塞控制机制