Android WebView 开发详解(二)
转载请注明出处 http://blog.csdn.net/typename/article/details/39495409 powered by miechal zhao
概览:
Android WebView 做为承载网页的载体控件,他在网页显示的过程中会产生一些事件,并回调给我们的应用程序,以便我们在网页加载过程中做应用程序想处理的事情。比如说客户端需要显示网页加载的进度、网页加载发生错误等等事件。 WebView提供两个事件回调类给应用层,分别为WebViewClient,WebChromeClient开发者可以继承这两个类,接手相应事件处理。WebViewClient 主要提供网页加载各个阶段的通知,比如网页开始加载onPageStarted,网页结束加载onPageFinished等;WebChromeClient主要提供网页加载过程中提供的数据内容,比如返回网页的title,favicon等。
1.WebViewClient的基本使用
- class MyAndroidWebViewClient extends WebViewClient {
- @Override
- public void onPageStarted(WebView view, String url, Bitmap favicon) {
- // TODO
- }
- @Override
- public void onPageFinished(WebView view, String url) {
- // TODO
- }
- }
- webview.setWebViewClient(new MyAndroidWebViewClient ());
2.WebViewClient API详解
- public boolean shouldOverrideUrlLoading(WebView view, String url)
当加载的网页需要重定向的时候就会回调这个函数告知我们应用程序是否需要接管控制网页加载,如果应用程序接管,并且return true意味着主程序接管网页加载,如果返回false让webview自己处理。
- public void onPageStarted(WebView view, String url, Bitmap favicon)
当内核开始加载访问的url时,会通知应用程序,对每个main frame这个函数只会被调用一次,页面包含iframe 或者framesets 不会另外调用一次onPageStarted,当网页内内嵌的frame 发生改变时也不会调用onPageStarted。
- public void onPageFinished(WebView view, String url)
当内核加载完当前页面时会通知我们的应用程序,这个函数只有在main frame情况下才会被调用,当调用这个函数之后,渲染的图片不会被更新,如果需要获得新图片的通知可以使用@link WebView.PictureListener#onNewPicture。
- public void onLoadResource(WebView view, String url)
通知应用程序WebView即将加载url 制定的资源
- public WebResourceResponse shouldInterceptRequest(WebView view,
- String url)
通知应用程序内核即将加载url制定的资源,应用程序可以返回本地的资源提供给内核,若本地处理返回数据,内核不从网络上获取数据。
- public void onReceivedError(WebView view, int errorCode,
- String description, String failingUrl)
当浏览器访问制定的网址发生错误时会通知我们应用程序,比如网络错误。
@param errorCode 错误号可以在WebViewClient.ERROR_* 里面找到对应的错误名称。
- public void onFormResubmission(WebView view, Message dontResend,
- Message resend)
如果浏览器需要重新发送POST请求,可以通过这个时机来处理。默认是不重新发送数据。
@param dontResent 当浏览器不需要重新发送数据时,可以使用这个参数。
- public void doUpdateVisitedHistory(WebView view, String url,
- boolean isReload)
通知应用程序可以将当前的url存储在数据库中,意味着当前的访问url已经生效并被记录在内核当中。这个函数在网页加载过程中只会被调用一次。注意网页前进后退并不会回调这个函数。
@param url 当前正在访问的url
- public void onReceivedSslError(WebView view, SslErrorHandler handler,
- SslError error)
当网页加载资源过程中发现SSL错误会调用此方法。我们应用程序必须做出响应,是取消请求handler.cancel(),还是继续请求handler.proceed();内核的默认行为是handler.cancel();
@param handler 处理用户请求的对象。
- public void onReceivedHttpAuthRequest(WebView view,
- HttpAuthHandler handler, String host, String realm)
通知应用程序WebView接收到了一个Http auth的请求,应用程序可以使用supplied 设置webview的响应请求。默认行为是cancel 本次请求。
@param handler 用来响应WebView请求的对象
- public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event)
提供应用程序同步一个处理按键事件的机会,菜单快捷键需要被过滤掉。如果返回true,webview不处理该事件,如果返回false, webview会一直处理这个事件,因此在view 链上没有一个父类可以响应到这个事件。默认行为是return false;
@param event 键盘事件名
- public void onScaleChanged(WebView view, float oldScale, float newScale)
通知应用程序webview 要被scale。应用程序可以处理改事件,比如调整适配屏幕。
- public void onReceivedLoginRequest(WebView view, String realm,
- String account, String args)
通知应用程序有个自动登录的帐号过程
4. WebChromeClient API详解
- public void onProgressChanged(WebView view, int newProgress)
通知应用程序当前网页加载的进度。
- public void onReceivedTitle(WebView view, String title)
当document 的title变化时,会通知应用程序
@param title document新的title
- public void onReceivedIcon(WebView view, Bitmap icon)
当前页面有个新的favicon时候,会回调这个函数。
@param icon 当前页面的favicon
- public void onReceivedTouchIconUrl(WebView view, String url,
- boolean precomposed)
@param url apple-touch-icon 的服务端地址
- public void onShowCustomView(View view, CustomViewCallback callback)
通知应用程序webview需要显示一个custom view,主要是用在视频全屏HTML5Video support。
- public void onHideCustomView()
退出视频通知
- public boolean onCreateWindow(WebView view, boolean isDialog,
- boolean isUserGesture, Message resultMsg)
请求创建一个新的窗口,如果我们应用程序接管这个请求,必须返回true,并且创建一个新的webview来承载主窗口。
- private void createWindow(final Message msg) {
- WebView.WebViewTransport transport = (WebView.WebViewTransport) msg.obj;
- final Tab newTab = mWebViewController.openTab(null, Tab.this, true,
- true);
- transport.setWebView(newTab.getWebView());
- msg.sendToTarget();
- }
- public void onRequestFocus(WebView view)
webview请求得到focus,发生这个主要是当前webview不是前台状态,是后台webview。
- public void onCloseWindow(WebView window)
通知应用程序从关闭传递过来的webview并从view tree中remove。
- public boolean onJsAlert(WebView view, String url, String message,
- JsResult result)
通知应用程序显示javascript alert对话框,如果应用程序返回true内核认为应用程序处理这个消息,返回false,内核自己处理。
@param url 当前请求弹出javascript 对话框webview 加载的url地址。
- public boolean onJsConfirm(WebView view, String url, String message,
- JsResult result)
通知应用程序提供confirm 对话框。
- public boolean onJsPrompt(WebView view, String url, String message,
- String defaultValue, JsPromptResult result)
通知应用程序显示一个prompt对话框。
- public boolean onJsBeforeUnload(WebView view, String url, String message,
- JsResult result)
通知应用程序显示一个对话框,让用户选择是否离开当前页面,这个回调是javascript中的onbeforeunload事件,如果客户端返回true,内核会认为客户端提供对话框。默认行为是return false。
- public void onExceededDatabaseQuota(String url, String databaseIdentifier,
- long quota, long estimatedDatabaseSize, long totalQuota,
- WebStorage.QuotaUpdater quotaUpdater)
通知应用程序webview内核web sql 数据库超出配额,请求是否扩大数据库磁盘配额。默认行为是不会增加数据库配额。
- public void onReachedMaxAppCacheSize(long requiredStorage, long quota,
- WebStorage.QuotaUpdater quotaUpdater)
通知应用程序内核已经到达最大的appcache。
- public void onGeolocationPermissionsShowPrompt(String origin,
- GeolocationPermissions.Callback callback)
当前页面请求是否允许进行定位。
- public void onGeolocationPermissionsHidePrompt()
- public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType, String capture)
这个回调是私有回调, 当页面需要请求打开系统的文件选择器,则会回调这个方法,比如我们需要上传图片,请求拍照,邮件的附件上传等等操作。
Android WebView 开发详解(二)的更多相关文章
- Android WebView 开发详解
Android WebView 开发详解 参见 http://blog.csdn.net/typename/article/details/39030091
- Android WebView 开发详解(一)
转载请注明出处 http://blog.csdn.net/typename/article/details/39030091 powered by meichal zhao 概览: Android ...
- Android Widget 开发详解(二) +支持listView滑动的widget
转载请标明出处:http://blog.csdn.net/sk719887916/article/details/47027263 不少开发项目中都会有widget功能,别小瞧了它,他也是androi ...
- Android WebView 开发详解(三)
转载请注明出处 http://blog.csdn.net/typename/article/details/40302351 powered by miechal zhao 概览 Android ...
- Android USB 开发详解
Android USB 开发详解 先附上 Android USB 官方文档 Android通过两种模式支持各种 USB 外设和 Android USB 附件(实现Android附件协议的硬件):USB ...
- JMessage Android 端开发详解
目前越来越多的应用会需要集成即时通讯功能,这里就为大家详细讲一下如何通过集成 JMessage 来为你的 App 增加即时通讯功能. 首先,一个最基础的 IM 应用会需要有哪些功能? 用户注册 / 登 ...
- 《Android游戏开发详解》一1.7 控制流程第1部分——if和else语句
本节书摘来异步社区<Android游戏开发详解>一书中的第1章,第1.7节,译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.7 ...
- Android Studio 插件开发详解二:工具类
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112856 本文出自[赵彦军的博客] 在插件开发过程中,我们按照开发一个正式的项 ...
- 【转】【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9057257 由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字 ...
随机推荐
- 常用经典SQL语句大全(基础)
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sqlserver --- 创 ...
- Java_Web学习路线
- JavaWeb_数据传输_原
本节目录: 1.如何从Servlet向JSP传送数据:(setAtrribute和getAtrribute) 2.jsp如何输入表达数据以及传数据到servlet(FormAction去向和Inpu ...
- Java快速教程
作者:Vamei 出处:http://www.cnblogs.com/vamei Java是面向对象语言.这门语言其实相当年轻,于1995年才出现,由Sun公司出品.James Gosling ...
- [leetcode]352. Data Stream as Disjoint Intervals
数据流合并成区间,每次新来一个数,表示成一个区间,然后在已经保存的区间中进行二分查找,最后结果有3种,插入头部,尾部,中间,插入头部,不管插入哪里,都判断一下左边和右边是否能和当前的数字接起来,我这样 ...
- 九度OJ 1505 两个链表的第一个公共结点 【数据结构】
题目地址:http://ac.jobdu.com/problem.php?pid=1505 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例. 对于每个测试案例, ...
- 第48条:如果需要精确的答案,请避免使用float和double
float和double主要为了科学计算和工程计算而设计,执行二进制浮点运算,这是为了在广泛的数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以不适合用于需要精确 ...
- 模板方法模式(Template Pattern)
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法的结构下,重新定义算法中的某些步骤. 这个模式是用来创建一个算法模板.模板就是一个方法.更具体地 ...
- ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused
工具/原料:Ubuntu 在采用scp在不同机器之间进行文件拷贝时出现标题所示的错误,原因可能是: 1.sshd 未启动 2.sshd 未安装 3.防火墙 4需重新启动ssh 服务 查看sshd进程方 ...
- the evaluation period for visual studio trial edition has ended的解决方法-转发
首先献上自己收集的Visual studio 2008序列号: Visual Studio 2008 Professional Edition: XMQ2Y-4T3V6-XJ48Y-D3K2V-6C4 ...