什么是Chrome和ChromeClient

本文解释了Webkit中的Chrome和ChromeClient的概念及其作用。Chrome指用户接口元素,如alert和confirm等;ChromeClient作为抽象接口,处理与WebCore页面视图相关的用户接口操作,如JavaScript警告框的展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Webkit里的Chrome概念比较抽象,而其实现ChromeClient更不好理解,它们常常给研究Webkit带来困惑,下面这篇小文解释这两者的概念。

1 Chrome
Chrome 常常用于描述用户接口元素(Element),比如alert, confirm, prompt

2 ChromeClient

ChromeClient是一个抽象接口,ChromeClient功能集中在大家熟知的用户接口(Chrome),比如alert, popup, confirm, window.open等--也就是包含某个WebCore的页面(Page)的视图(View)的用户接口。WebCore用ChromeClient与多个WebCore之上的WebKit API 层交互。这个抽象是重要的,因为WebCore之上有许多API层,他们处理层与层之间的用户接口大不相同,例如WebKit和WebKit2就有明显不同的需求。

举一个简单的例子,ChromeClient::runJavaScriptAlert被JS的alert函数调用。mac 上的WebView class的runJavaScriptAlert的实现只是简单的调用合适的委托方法(WebUIDelegate):

442     if ([delegate respondsToSelector:selector]) {

443         CallUIDelegate(m_webView, selector, message);

444         return;

445     }

Qt是在QWebPage里实现的:

void QWebPage::javaScriptAlert(QWebFrame *frame, const QString& msg)
{
    Q_UNUSED(frame)
#ifndef QT_NO_MESSAGEBOX
    QWidget* parent = (d->client) ? d->client->ownerWidget() : 0;
    QMessageBox box(parent);
    box.setWindowTitle(tr("JavaScript Alert - %1").arg(mainFrame()->url().host()));
    box.setTextFormat(Qt::PlainText);
    box.setText(msg);
    box.setStandardButtons(QMessageBox::Ok);
    box.exec();
#endif
}

其他情况下,比如显示工具提示信息,是由ChromeClient的具体实现直接处理的,无需WebView委托的参与。

以上部分内容来自于网络。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值