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

目录
相关文章
|
内存技术 网络架构 Go
带你读《计算机体系结构:量化研究方法(英文版·原书第6版)》之二: Memory Hierarchy Design
本书堪称计算机系统结构学科的“圣经”,是计算机设计领域学生和实践者的必读经典。本书系统地介绍了计算机系统的设计基础、存储器层次结构设计、指令级并行及其开发、数据级并行、GPU体系结构、线程级并行和仓库级计算机等。本书内容丰富,既介绍了当今计算机体系结构的研究成果,也引述了许多计算机系统设计开发方面的实践经验。另外,各章结尾还附有大量的习题和参考文献。
|
API Android开发
Skia引擎API整理介绍(skia in Androi“.NET研究”d 2.3 trunk)
  序  通过google, baidu,我们都很难搜索到关于skia引擎方面的文档,skia的官方wiki(http://code.google.com/p/skia)也只有寥寥无几的文字简单介绍了SkCanvas, SkBitmap等几个主要的class,我通过分析源代码,查看jni接口对skia引擎的封装,总结和翻译了下面的一些文字,希望对想在Android平台进行native画图的朋友有所帮助,当然,你也可以直接使用OpenGL来画图。
1708 0
|
算法 Java 测试技术
官方文档:Androi“.NET研究”d应用程序运行的性能设计
  Android应用程序运行的移动设备受限于其运算能力,存储空间,及电池续航。由此,它必须是高效的。电池续航可能是一个促使你优化程序的原因,即使他看起来已经运行的足够快了。由于续航对用户的重要性,当电量耗损陡增时,意味这用户迟早会发现是由于你的程序。
1094 0
|
Web App开发 PHP
一起谈.NET技术,使用DeeepZoom Composer进行富图像应用的开发(翻译--1)
  富图像应用(第一部分)   在这章,你会学到下列内容: 使用Deep Zoom Composer 工具建立高质量、高度友好的图像。 组合为平滑、可缩放的全景图像。 建立以编程形式方式控制的深度缩放的Silverlight应用程序。
1127 0
|
PHP Windows
一起谈.NET技术,使用DeeepZoom Composer进行富图像应用的开发(翻译--2)
  Deep Zoom程序设计      到目前为止,你已经见识了Deep Zoom Composer工具,也见到了Deep Zoom 多图像的浏览器应用程序。不过你可能还需要知道怎样设计这样的程序。   因此,在这一节中,你将能够在Silverlight中开发Deep Zoom程序,可以用Deep Zoom Composer工具来创建图像瓷片,而且你也能够将它们集成到你自己的Silverlight应用程序中,下面的过程将显示MultiScaleImage控件来展示这个过程。
1055 0
|
前端开发 开发工具
Silverlight同步(Synchro“.NET研究”nous)调用WCF服务
  Silverlight的RIA应用中访问远端的WebService或WCF服务,都是通过异步线程模式调用的。在某些情况下我们的调用是需要同步进行,虽然Silverlight没有内置同步线程模式调用远端服务接口,但是我们可以通过多线程的处理来伪装出同步调用的实现。
755 0