WebKit2提供稳定非阻塞式基于C的API,多数API对平台独立(agnostic)。为了获得非阻塞能力,Webkit2使用了一些技术,正式这些技术的使用,使得Webkit能给它的使用者带来大量的功能,这些技术包括:
- 通知式的客户回调,例如didFinishLoadForFrame。这些类型的API通知使用者:发生了某件事,然而并不给他们机会去处理它。
- 策略式的客户回调,例如decidePolicyForNavigationAction。这些类型的API允许使用者有空时才对某个动作做处理,同时通过监听器对象把发生了某个动作这件事告知页面。
- 策略设置式,例如WKContextSetCacheModel, WKContextSetPopupPolicy。这些类型的API允许使用者选择预先定义的策略,不需要回调函数对UIProcess的参与。这些类型的API可能是一套枚举类型的特殊策略,或者是带通配符的字符串列表等。
- 注入的代码,例如WebBundle。当所有其他选择都失败了,这些代码可以进入WebProcess进程。当访问DOM时,这特别有用。目前,这种API还处于计划当中,并没有实现。
主要的API:
WKContextRef
- 封装了所有支持WebKit特殊用法的页面。此上下文的所有页面共享同一个“已访问链表”、local storage,preferences。
WKPageNamespaceRef
- 封装所有能互相运行脚本的页面(Encapsulates all pages that can script each other.)
WKPageRef
- Basic unit of browsing. Stays the same as the main frame changes.
WKView[Ref]
- Native view that hooks into the platform‘s toolkit. On Windows, this wraps a HWND. On the Mac, it inherits from NSView.
注意:此需求要求完全非阻塞式,这与之前的Webkit API并不一致。许多存在的Webkit API都不能以非阻塞式来实现。因此,我们需要Webkit2,我们也会利用此机会清理、简化那些API。
时间: 2024-10-24 23:50:26