什么是Chrome和ChromeClient

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委托的参与。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值