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

目录
相关文章
|
8月前
|
Android开发
Android WindowFeature小探究,Android客户端Web页面通用性能优化实践
Android WindowFeature小探究,Android客户端Web页面通用性能优化实践
|
存储 监控 安全
DeeTune:基于 eBPF 的百度网络框架设计与应用
随着云计算的技术的不断迭代演进,百度内部服务逐渐搬迁到云环境中,部署成本和效率取得明显收益,但一些可观测能力的短板和缺失逐渐显露,传统的方式往往通过植入代码进行修改来实现,但在业务形态和技术栈多样性的背景下,面临业务被侵入、沟通协调、性能、稳定性等方面的诸多问题。本文中我们介绍百度基于 eBPF 实现的网络框架:DeeTune,包含构建服务拓扑、流量录制、无侵入指标监控等能力,进一步提升了 SRE 和质量保障的工作效率。
130 0
|
XML JSON 负载均衡
探秘Linux网络设计:Reactor模型与高效http静态服务器构建
本文将深入探讨Linux网络设计中的Reactor模型,并展示如何利用该模型构建高效的http静态服务器。在现代互联网环境中,快速响应和高吞吐量对于提供卓越用户体验至关重要。通过理解Reactor模型的基本概念和工作原理,我们将揭示它在构建高并发应用中的关键作用。本文还将详细介绍如何利用Reactor模型优化网络通信,实现快速的http请求处理和静态资源传输。通过实践经验的分享,包括事件驱动编程、多线程和多进程处理以及负载均衡等技巧,读者将获得构建高效http静态服务器的实际指导和启示。
238 0
探秘Linux网络设计:Reactor模型与高效http静态服务器构建
|
C++ iOS开发 Windows
手把手带你去分析NSObject本质是什么
这篇行文主要讲 NSObject 对象三连问:NSObject本质是什么,占用多少内存,以及怎么去分析。 从下图我们可以看到,我们平时编写的 Objective-C 代码,最终转换到机器语言的过程: https://img-blog.csdnimg.cn/2a6a930a8d3546f896d7527a95c3a576.png 换句话说,Objective-C的面向对象都是基于C\C++的数据结构实现的,或者说其底层实现其实都是C\C++代码。
189 0
手把手带你去分析NSObject本质是什么
|
iOS开发
iOS网络编程之三——NSURLConnection的简单使用
iOS网络编程之三——NSURLConnection的简单使用
170 0
iOS网络编程之三——NSURLConnection的简单使用
|
前端开发 安全 程序员
详解 WWDC 20 SwiftUI 的重大改变及核心优势
随着 WWDC 20 相关新特性和介绍视频的释出,都明确的宣告着 SwiftUI 元年已经到了,SwiftUI 已经成长为新时代的布局引擎。 以下从几个方面分享关于 SwiftUI 的重大改变及核心优势。
3007 0
详解 WWDC 20 SwiftUI 的重大改变及核心优势
|
内存技术 网络架构 Go
带你读《计算机体系结构:量化研究方法(英文版·原书第6版)》之二: Memory Hierarchy Design
本书堪称计算机系统结构学科的“圣经”,是计算机设计领域学生和实践者的必读经典。本书系统地介绍了计算机系统的设计基础、存储器层次结构设计、指令级并行及其开发、数据级并行、GPU体系结构、线程级并行和仓库级计算机等。本书内容丰富,既介绍了当今计算机体系结构的研究成果,也引述了许多计算机系统设计开发方面的实践经验。另外,各章结尾还附有大量的习题和参考文献。