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

目录
相关文章
|
2月前
|
存储 人工智能 自然语言处理
Lakehouse x AI ,打造智能 BI 新体验
本文整理自瓴羊的王璟尧老师与镜舟科技石强老师的联合分享,围绕 Quick BI 在智能 BI 场景中的落地实践,深入探讨了 StarRocks 如何凭借 MPP 架构、实时分析能力与 AI 原生支持,成为智能分析的理想 Lakehouse 引擎底座,助力 BI 从“被动查询”迈向“主动决策”,开启数据“会说话”的新体验。
|
机器学习/深度学习 人工智能 监控
基于YOLOv8的人体检测、行人识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
本项目基于YOLOv8实现人体检测与行人识别,集成PyQt5图形界面,支持图片、视频、摄像头等多种输入方式。包含完整训练代码、数据集及部署教程,开箱即用,适用于安防监控、人数统计等场景。
|
3月前
|
缓存 Windows
电脑小白必看:C 盘满了怎么清理?软件搬到 D 盘的超简单步骤
C盘空间不足导致电脑卡顿?试试这些方法优化!首推FreeMove工具,不到1MB,简单两步搬软件,解放C盘空间。此外,清理临时文件、转移用户文件夹至D盘、调整虚拟内存位置、使用符号链接等技巧也能有效缓解压力。注意:系统核心目录不可移动,操作前请备份重要数据,确保安全!
301 5
|
11月前
|
算法 编译器 C++
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
226 2
|
Prometheus 监控 关系型数据库
数据库实时监控功能
【6月更文挑战第9天】数据库实时监控功能
362 4
Linux磁盘配额
在Linux系统中,当用户的空间占用接近或超过预设的软限制时,系统会警告用户磁盘空间将满。软限制是允许用户使用的磁盘空间的最大值,在此限制下,用户仍有宽限期来减少空间使用。如果在宽限期内用户未减少空间占用,达到硬限制,软限制将升级为硬限制。硬限制是用户可以使用的绝对最大值。默认的宽限期是7天,如果超过这个期限,用户的空间限制会立即降低到硬限制。
|
人工智能 IDE JavaScript
分享一个很好用的代码辅助AI工具CodeGeeX2
分享一个很好用的代码辅助AI工具CodeGeeX2
352 1
|
算法 Unix Shell
【Shell 命令集合 系统管理 】Linux 显示或设置系统时间和日期 date命令 使用指南
【Shell 命令集合 系统管理 】Linux 显示或设置系统时间和日期 date命令 使用指南
472 0
|
存储 Windows
Cheat Engine基本使用方法
Cheat Engine基本使用方法
964 2
|
存储 人工智能 API
Elasticsearch实战:常见错误及详细解决方案
Elasticsearch实战:常见错误及详细解决方案