QTWebkit中的webkit/qt/api文檔


QTWebkit中的webkit/qt/api文檔

概述

該目錄下的文件均以前前綴qweb開頭,主要用於支持前端的實現。核心的類為:qwebview、qwebpage、qwebframe等三個類。這三者間的關系由圖描述。(注:圖來自QTWebkit自帶文檔)

 

圖1 qwebview,qwebpage,qwebframe三者關系

View是一個邏輯視圖,真正的工作分別由page和frame完成。Page負責處理用戶action、navigation和text editor等工作;frame則負責繪制工作。從webkit的角度來看,page與frame是一對多的關系,因為一個page下可以有frame tree,但通常是一對一的關系。從構造順序來看,Page先於frame構造。

類qwebsetting是管理配置信息的,比如主頁地址、代理、是否啟用javascript、是否顯示圖片、是否支持插件等。

類詳解

類圖

 

QWebView

QWebView為QWidget的子類。QWidget是QT平台的PlatformWidget。

QWebView.cpp對類QWebView有較為詳細的說明。感興趣的話,大家可以看看。

QWebView提供了一個widget用於顯示和編輯web文檔。

QWebView是QtWebKit web browsing模塊的主要widget組件。

常用API

load – load a url from local / remote

history() – 訪問歷史記錄對象

settings() – 訪問settings對象

url() – 讀取當前url

title() – 讀取當前title

triggerPageAction  – 處理web action

event()

QWebPage

QWebPage.cpp中對QWebPage做了較為詳細的說明。感興趣的話,大家可以看看。

QWebPage類提供了可用於顯示和編輯web文檔的對象。

QWebPage負責web content,setting,history,navigation。在widget-less的環境下,QWebPage可以和QWebFrame協同工作,完成QWebView類似的功能。

NavigationType表

NavigationType

NavigationTypeLinkClicked

NavigationTypeFormSubmitted

NavigationTypeBackOrForward

NavigationTypeReload

NavigationTypeFormResubmitted

WebAction表

(方法QWebPage::triggerAction觸發特定的action)

WebAction

NoWebAction

不做任何操作

OpenLink

打開當前鏈接

OpenLinkInNewWindow

在新window中打開當前鏈接

OpenFrameInNewWindow

在新window中復制當前frame

DownloadLinkToDisk

保存當前link

CopyLinkToClipboard

拷貝當前link到剪切板

OpenImageInNewWindow

在新window中打開image

DownloadImageToDisk

保存image到disk

CopyImageToClipboard

拷貝image到剪切板

CopyImageUrlToClipboard

復制image的url到剪切板

Back

Navigate back

Forward

Navigate forward

Stop

停止load當前頁面

StopScheduledPageRefresh

停止所有掛起頁面的刷新或重定向

Reload

重載當前頁面

ReloadAndBypassCache

重載當前頁面,不使用本地cache

Cut

剪切

Copy

復制

Paste

粘貼

Undo

撤消最近的一次編輯

Redo

Redo最近的一次編輯

MoveToNextChar

移動光標到下一個字符

MoveToPreviousChar

移動光標到上一個字符

MoveToNextWord

移動光標到下一個詞

MoveToPreviousWord

移動光標到上一個詞

MoveToNextLine

移動光標到下一行

MoveToPreviousLine

移動光標到上一行

MoveToStartOfLine

移動光標到行的開始處

MoveToEndOfLine

移動光標到行的結尾處

MoveToStartOfBlock

移動光標到block的開始處

MoveToEndOfBlock

移動光標到block的結尾處

MoveToStartOfDocument

移動光標到文檔的開始處

MoveToEndOfDocument

移動光標到文檔的結尾處

SelectNextChar

選擇下一個字符

SelectPreviousChar

 

SelectNextWord

 

SelectPreviousWord

 

SelectNextLine

 

SelectPreviousLine

 

SelectStartOfLine

 

SelectEndOfLine

 

SelectStartOfBlock

 

SelectEndOfBlock

 

SelectStartOfDocument

 

SelectEndOfDocument

 

DeleteStartOfWord

 

DeleteEndOfWord

 

SetTextDirectionDefault

 

SetTextDirectionLeftToRight

 

SetTextDirectionRightToLeft

 

ToggleBold

Bold和normal間切換

ToggleItalic

Italic和normal間切換

ToggleUnderline

Underline和normal間切換

InspectElement

 

InsertParagraphSeparator

插入一個新的段落

InsertLineSeparator

插入一個新行

SelectAll

選擇全部內容

PasteAndMatchStyle

從剪切板中粘貼內容並使用當前樣式

RemoveFormat

刪除格式和樣式

ToggleStrikethrough

Strike和normal間切換

ToggleSubscript

Subscript和baseline間切換

ToggleSuperscript

Superscript和baseline間切換

InsertUnorderedList

 

InsertOrderedList

 

Indent

給當前選擇的block增加一個Intent

Outdent

給當前選擇的block減一個Intent

AlignCenter

內容中間對齊

AlignJustified

內容兩邊對齊

AlignLeft

內容左對齊

AlignRight

內容右對齊

WebWindowType表

WebWindowType

WebBrowserWindow

規則的web browser window

WebModalDialog

行為和modal dialog一樣

Alert、Confirm和Prompt

Javascript中的alert、confirm、prompt三個彈出對話框,通常由chromeclient來實現。在qtwebkit中,這三個彈出對話框的實現放在了QWebPage中。三個實現均使用了QMessageBox類。宏QT_NO_MESSAGEBOX需要關閉。或者說,只有qt支持MessageBox才可以。

Android自帶的browser不支持彈出對話框,alert、confirm、prompt以log方式打印。可以自定義一個chromeclient實現這三個方法。

Event

QT中的event由類QEvent定義。其子類QKeyEvent、QMouseEvent、QTouchEvent為主要的三類事件。在QTWebkit中,QWebPage::event(QEvent*)為事件分發方法。它定義了統一的分發接口。具體的分發細則由私有類QWebPagePrivate實現。

QWebPage::event(QEvent*)中處理的event非常多,詳見下表。

Event Type

Timer

d->timerEvent

MouseMove

d->mouseMoveEvent

MouseButtonPress

d->mousePressEvent

MouseButtonDblClick

d->mouseDoubleClickEvent

MouseButtonRelease

d->mouseReleaseEvent

ContextMenu

d->contextMenuEvent

Wheel

d->wheelEvent

KeyPress

d->keyPressEvent

KeyRelease

d->keyReleaseEvent

FocusIn

d->focusInEvent

FocusOut

d->focusOutEvent

DragEnter

d->dragEnterEvent

DragLeave

d->dragLeaveEvent

DragMove

d->dragMoveEvent

Drop

d->dropEvent

InputMethod

d->inputMethodEvent

TouchBegin

d->touchEvent

TouchUpdate

d->touchEvent

TouchEnd

d->touchEvent

注:d為QWebPagePrivate類型的對象。

通過閱讀QWebPagePrivate的實現,可以發現,事件的處理均是由類EventHandler的handleXXXX實現的。類EventHandler是webkit的事件處理器,所以,若要改變webkit的事件處理規則可以修改該類。

實際上,Ekioh也是類似的事件處理方法。

EventHandler使用PlatformXXXXEvent來描述相關的XXXXEvent,所以,需要將QXXXXEvent轉化為對應的PlatformXXXXEvent。

根據在Ekioh上的經驗,一個事件由驅動拋出,交給window server系統。Window server系統會按照自己的定義,把事件封裝,然后,交給browser應用。Browser應用則把window server的事件type轉化成webkit需要的PlatformXXXXEvent,交給webkit處理。

Keydown事件的處理流程是需要注意的。它是先dispatch給Editor,然后再dispatch給DOM。Webkit中的解釋是:”Run input method in advance of DOM event handling. This behaviour is necessary in order to match IE.”

WTF!!

如果要處理inputmethod,則修改EditorClientQT。

PageClients

在ekioh中好像還沒有這個類。Page需要的clients通常直接以構造參數的方式傳給Page。

從設計模式上看,Page和Page Clients間應用的是策略模式。

Page Clients分別為:

l  ChromeClient

l  ContextMenuClient

l  EditorClient

l  DragClient

l  InspectorClient

l  DeviceOrientationClient – 編譯選項DEVICE_ORIENTATION控制

l  DeviceMotionClient - 編譯選項CLIENT_BASED_GEOLOCATION控制

l  GeolocationClient - 編譯選項CLIENT_BASED_GEOLOCATION控制

qt的page clients的實現位於目錄webkit/qt/WebCoreSupport。

QWebFrame

QWebFrame代表web page中的一個frame。一個web page至少包含一個main frame。其它frame可以由<frame>或<iframe>標簽創建。

遍歷DOM樹的方法

DOM樹遍歷與操作

documentElement

返回DOM樹的根節點

findAllElements, findFirstElement

返回滿足條件的元素

load,setHtml, setContent

 

toHtml, toPlainText

 

frameName

 

title, url, baseUrl, icon

 

 

 

QWebFrame的RenderLayer種類

RenderLayer

ContentsLayer

 

ScrollBarLayer

 

PanIconLayer

 

AllLayers

 

 

QWebHistory

QWebSettings

QWebSettings類用於存儲QWebPage和QWebFrame使用的配置信息。

每一個QWebPage對象都有一個屬於它的QWebSettings對象。該QWebSettings對象對該page進行配置。

QWebElement

QWebElement類提供了便捷訪問DOM元素的方法。DOM樹的根是document元素,可以使用方法QWebFrame::documentElement()訪問。

訪問特定元素的方法:

findAll()或findFirst()

遍歷文檔也可以用firstChild()和nextSibling()。

DOM接口

findAll, findFirst

訪問特定元素(由CSS選擇器指定)

firstChild, nextSibling, lastChild

previousSibling

 

attribute, setAttribute

查詢或修改元素

hasAttribute, hasAttributeNS,

 

removeAttribute

 

hasFocus, setFocus

 

tagName

 

parent

 

QWebElement遍歷DOM樹的實現依賴於類Element,遍歷工作均由Element完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM