WebKit 源代码和文档经常使用术语“Chrome 客户端”来描述用于前端显示的某个类。我对“Chrome”一词的含义感到困惑,因为它似乎与 Google Chromium 端口无关。很难在网络上搜索任何关于此的信息,因为搜索词“chrome”和“client”不可避免地会带来与 Google Chrome 浏览器相关的结果,或者只是给我 WebKit 源代码的链接。
谁能解释一下 Chrome 客户端是什么,以及在这种情况下“Chrome”是什么意思?
ChromeClient
是 WebCore 用来与构建在 WebCore 之上的多个 WebKit API 层交互的抽象接口。它的功能以包含特定 WebCore 的视图的用户界面(又名“chrome”)方面为中心Page
。这种抽象很重要,因为在 WebCore 之上构建了许多单独的 API 层,并且每个 API 层处理用户界面的方式即使在同一操作系统上运行的 API 层之间也可能不同(例如,WebKit 和 WebKit2 有完全不同的需求) )。
举个简单的例子,ChromeClient::runJavaScriptAlert
由 JavaScriptalert
函数调用。runJavaScriptAlert
CocoaWebView
类的实现只是WebUIDelegate
像人们期望的那样调用适当的方法。其他情况,例如工具提示的显示,完全由具体ChromeClient
实现直接处理,而不涉及任何WebView
's 委托。
ChomeClient 是一个界面,它将显示 GUI 元素(如警报、弹出窗口、提示、窗口(window.open))委托给 WebKit 端口。
基本上我们可以说窗口相关的操作,比如滚动,通过窗口的无效部分请求重绘,..等
每个 WebKit 端口都通过覆盖 ChromeClient 接口来提供自己的实现。例如 Qt 可能有 ChromeClientQt.h & ChromeClientQt.cpp & GTK 可能有 ChromeClientGTk.h & ChromeClientGTk.cpp。
Webkit 是 Safari 和 Chrome 使用的 Web 浏览器渲染引擎(以及其他,但这些是流行的)。
CSS 选择器上的 -webkit 前缀是只有该引擎才能处理的属性,与 -moz 属性非常相似。我们中的许多人都希望这会消失,例如 -webkit-border-radius 将被标准的border-radius 取代,并且对于多个浏览器,您不需要针对同一事物的多个规则。这实际上是“预规范”功能的结果,这些功能旨在不干扰标准版本的出现。
对于您的更新:...不,它实际上与 IE 无关,至少在 9 之前 IE 使用称为 Trident 的不同渲染引擎。