UIWebView体系结构(八)各个Client综述

简介: 各种Clients会有些共性: 1.WebCore会声明抽象基类,各Controller持有基类类型的指针 2.由第三方创建Client并传递指针给Controller,Controller析构时会通知Client,Client此时删除自身。

各种Clients会有些共性:

1.WebCore会声明抽象基类,各Controller持有基类类型的指针

2.由第三方创建Client并传递指针给Controller,Controller析构时会通知Client,Client此时删除自身。例如

void WebChromeClient::chromeDestroyed()
{
    delete this;
}

3.自身脱离WebCore命名空间,例如会有这样的声明:

class WebFrameLoaderClient : public WebCore::FrameLoaderClient


这些Client的具体类在WebKit.framework里实现的,所以iOS Safari的开源码不公开。具体的函数表可用xdb(参考http://blog.csdn.net/hursing/article/details/8745334)或IDA(参考http://blog.csdn.net/hursing/article/details/8926315)找出来,这里就只说重要的函数。下面是逐个Client说说。


ChromeClient在IOS有特殊的实现,有两层的继承:

WebChromeClientIOS->WebChromeClient->ChromeClient

ChromeClient主要处理UI相关的回调事件和询问。例如:

WebChromeClient::focusedNodeChanged(WebCore::Node*) 
焦点元素已改变

WebChromeClientIOS::runJavaScriptAlert(WebCore::Frame*, WTF::String const&)  
显示Javascript中的alert函数对话框

WebChromeClient::hasOpenedPopup() const 
询问是否已打开Popup菜单(select标签的选择菜单)


为了兼容各平台的展现不同,所以与UI相关的ChromeClient非常多函数,会影响用户操作的事件都有通知。更多的函数包括:已完成排版、开始/结束overflow元素的滚动、表单的状态变化、键盘状态的变化、同步绘制完毕等。


EditorClient负责页面输入框的交互逻辑,由WebEditorClient继承实现。

负责的操作有:键盘输入、选择、复制、剪切、粘贴、撤销、重做、语法检查、自动纠错等。


FrameLoaderClient负责网络加载的事件回调通知和决策,由WebFrameLoaderClient继承实现。

负责的操作有:强制排版、通知开始加载、加载进度、加载结束、加载失败、询问某种MIMEType的资源能够显示、已接收favorite icon的通知、排版完毕的通知、询问可否缓存资源等。


此外,还有WebInspectorClient负责网页调试功能、WebGeolocationClient负责地理位置信息的获取、DeviceOrientationClientIOS负责获取设备方向,DeviceMotionClientIOS负责获取设备的加速度。


EmptyClients.h会对这些Client做一个空实现,即基本什么都不做。这些Empty Client应该是UIWebView会用到的,和Mobile Safari有区分。


上一篇:UIWebView体系结构(七)WebView

目录
相关文章
|
消息中间件 JavaScript 前端开发
postMessage踩坑实践
在低代码编辑器中进行页面预览常常不得不用到iframe进行外链的url引入,这就涉及到了预览页面与编辑器页面数据通信传值的问题,常常用到的方案就是postMessage传值,而postMessage本身在eventloop中也是一个宏任务,就会涉及到浏览器消息队列处理的问题,本文旨在针对项目中的postMessage的相关踩坑实践进行总结,也为想要使用postMessage传递数据的童鞋提供一些避坑思路。
133 0
|
索引
LinkedList 基本示例及源码解析(二)
LinkedList 基本示例及源码解析
57 0
|
消息中间件 存储 开发框架
常用消息队列对比
作为中间件,消息队列是分布式应用间交换信息的重要组件。消息队列可驻留在内存或磁盘上,队列可以存储消息直到它们被应用程序读走。通过消息队列,应用程序可以在不知道彼此位置的情况下独立处理消息,或者在处理消息前不需要等待接收此消息。
286 0
常用消息队列对比
|
程序员 Shell Docker
Docker 常用操作命令
文章首发于微信公众号《程序员果果》地址:https://mp.weixin.qq.com/s/S9VkzSJx_JOY8zDiC_nuEg 1. 启动容器 docker run IMAGE [COMMAND] [ARG.
1309 0
|
网络协议 弹性计算 负载均衡
App Store ipv6 审核, 包过
这次介绍下 App Store 审核的三个方法之一, ipv6转换服务, 本人亲测两次有效. 目前还是包月服务, 本月阿里云这边会开通按天的服务, 需要的小伙伴快来了解下吧 下面进入正题 : 测试ipv6网站访问 http://ipv6-test.
1768 0
|
大数据 数据挖掘 BI
SharePoint自动化系列——Add/Remove "Record" from items
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 目的:批量的将SharePoint items变成records或者将records变成普通的items。
772 0

热门文章

最新文章