什麼是Chrome和ChromeClient,chromechromeclient

來源:互聯網
上載者:User

什麼是Chrome和ChromeClient,chromechromeclient

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委託的參與。

以上部分內容來自於網路。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.