檢視原始碼 wxWebView (wx v2.4.3)

此控制項可用於渲染網頁 (HTML / CSS / javascript) 文件。

它旨在允許為每個埠建立多個後端,儘管目前只有一個可用。它與 wxHtmlWindow 的不同之處在於,每個後端實際上都是一個完整的渲染引擎,在 MSW 上是 Trident,在 macOS 和 GTK 上是 Webkit。這允許正確檢視包含 javascript 和 css 的複雜頁面。

後端描述

Par

IE 後端使用 Microsoft 的 Trident 渲染引擎,特別是本機安裝的 Internet Explorer 所使用的版本。因此,它僅適用於 MSW 埠。預設情況下,此後端使用的 WebBrowser 控制項的最新版本會模擬 Internet Explorer 7。可以使用 wxWebView::MSWSetEmulationLevel() 的登錄設定來變更此設定,如需詳細資訊,請參閱 這篇 文章。此後端完全支援自訂配置和虛擬檔案系統。

Par

Edge (Chromium) 後端使用 Microsoft 的 Edge WebView2。它適用於 Windows 7 及更新版本。此後端目前不支援以下功能:虛擬檔案系統、自訂 URL、尋找。

預設情況下未啟用此後端,若要建置它,請依照以下步驟進行

  • 需要 Visual Studio 2015 或更新版本

  • 下載 WebView2 SDK nuget 套件 (版本 0.9.488 或更新版本)

  • 將套件解壓縮 (它是一個 zip 封存檔) 到 wxWidgets/3rdparty/webview2 (解壓縮後您應該會有 3rdparty/webview2/build/native/include/WebView2.h 檔案)

  • 在 CMake 或 setup.h 中啟用 wxUSE_WEBVIEW_EDGE

  • 建置 wxWidgets webview 程式庫

  • WebView2Loader.dllwxWidgets/3rdparty/webview2/build/ 的子目錄 (對應於所用架構 (x86 或 x64)) 複製到您的應用程式可執行檔

  • 在執行階段,您可以使用 isBackendAvailable/1 來檢查是否可以使用後端 (如果可以載入 WebView2Loader.dll 並且已安裝 Edge (Chromium),則可以使用)

  • 請務必依照 WebView2 SDK 授權的要求,在您的應用程式文件中新增關於使用它的注意事項

Par

在 GTK 下,WebKit 後端使用 WebKitGTK+。目前所需的最低版本為 1.3.1,該版本預設與 Ubuntu Natty 和 Debian Wheezy 一起提供,並且具有套件名稱 libwebkitgtk-dev。在此後端下,支援自訂配置和虛擬檔案系統,但是目前使用 data:// 配置載入嵌入式資源 (例如影像和樣式表)。

Par

在 GTK3 下,使用 WebKitGTK+ 的 WebKit2 版本。在 Ubuntu 中,所需的套件名稱為 libwebkit2gtk-4.0-dev,在 Fedora 中為 webkitgtk4-devel。除了清除和啟用/停用歷史記錄之外,所有 wxWEBVIEW_WEBKIT 功能都受到支援。

Par

macOS WebKit 後端使用 Apple 的 WebView 類別。此後端完全支援自訂配置和虛擬檔案系統。

非同步通知

wxWebView 中的許多方法都是非同步的,也就是說,它們會立即傳回並在背景中執行其工作。這包括諸如 loadURL/2reload/2 之類的函式。若要接收這些函式進度和完成的通知,您需要處理提供的事件。具體而言,wxEVT_WEBVIEW_LOADED 會在頁面或子框架完成載入時通知,而 wxEVT_WEBVIEW_ERROR 會在發生錯誤時通知。

虛擬檔案系統和自訂配置

wxWebView 支援註冊自訂配置處理常式,例如 filehttp。若要執行此操作,請建立一個繼承自 wxWebViewHandler (在 wx 中未實作) 的新類別,其中 wxWebHandler::GetFile() 會傳回一個指向 wxFSFile (在 wx 中未實作) 的指標,該指標代表給定的 URL。然後,您可以使用 RegisterHandler() (在 wx 中未實作) 註冊您的處理常式,它將針對所有頁面和資源呼叫。

提供 wxWebViewFSHandler (在 wx 中未實作) 以存取 wxFileSystem (在 wx 中未實作) 封裝的虛擬檔案系統。wxMemoryFSHandler (在 wx 中未實作) 文件提供了一個如何使用此功能的範例。

提供 wxWebViewArchiveHandler (在 wx 中未實作) 以允許瀏覽 zip 封存檔內的頁面。它支援以下形式的路徑:scheme:///C:/example/docs.zip;protocol=zip/main.htm

此類別衍生自,並且可以使用來自以下類別的函式

wxWidgets 文件:wxWebView

事件

此類別發出的事件類型

摘要

函式

如果可以複製目前選取項目,則傳回 true。

如果可以剪下目前選取項目,則傳回 true。

如果可以向後瀏覽已瀏覽頁面的歷史記錄,則傳回 true。

如果可以向前瀏覽已瀏覽頁面的歷史記錄,則傳回 true。

如果可以貼上資料,則傳回 true。

如果存在要重做的動作,則傳回 true。

擷取目前的 HTML 引擎是否支援縮放類型。

如果存在要復原的動作,則傳回 true。

清除歷史記錄,這也會移除可見頁面。

清除目前選取項目。

複製目前選取項目。

剪下目前選取項目。

刪除目前選取項目。

啟用或停用右鍵內容功能表。

啟用或停用歷史記錄。

在目前頁面上尋找片語,如果找到,控制項會將片語捲動到檢視中並選取它。

取得目前網頁的標題,如果沒有標題,則取得其 URL/路徑。

取得目前顯示的文件 URL。

取得目前顯示文件的 HTML 原始碼。

取得目前頁面的文字。

傳回目前選取的原始碼 (如果有的話)。

傳回目前選取的文字 (如果有的話)。

取得頁面的縮放層級。

取得頁面的縮放比例。

取得目前如何解譯縮放比例。

向後瀏覽已瀏覽頁面的歷史記錄。

向前瀏覽已瀏覽頁面的歷史記錄。

如果存在目前選取項目,則傳回 true。

允許檢查目前是否有特定的後端可用。

傳回 Web 控制項目前是否忙碌 (例如,載入頁面)。

如果會在右鍵按一下時顯示內容功能表,則傳回 true。

傳回 Web 控制項目前是否可編輯。

從 URL 載入網頁。

使用 wxWebViewFactory (在 wx 中未實作) 建立新 wxWebView 的工廠函式。

貼上目前資料。

開啟列印對話方塊,以便使用者列印目前顯示的頁面。

重做上次動作。

重新載入目前顯示的 URL。

執行給定的 JavaScript 程式碼。

選取整個頁面。

設定 Web 控制項的可編輯屬性。

將顯示的頁面原始碼設定為給定字串的內容。

設定頁面的縮放層級。

設定頁面的縮放比例。

設定如何解譯縮放比例。

停止目前的頁面載入程序 (如果有的話)。

復原上次動作。

類型

-type wxWebView() :: wx:wx_object().

函式

-spec canCopy(This) -> boolean() when This :: wxWebView().

如果可以複製目前選取項目,則傳回 true。

注意:在 macOS WebKit 後端上,這會始終傳回 true

-spec canCut(This) -> boolean() when This :: wxWebView().

如果可以剪下目前選取項目,則傳回 true。

注意:在 macOS WebKit 後端上,這會始終傳回 true

-spec canGoBack(This) -> boolean() when This :: wxWebView().

如果可以向後瀏覽已瀏覽頁面的歷史記錄,則傳回 true。

-spec canGoForward(This) -> boolean() when This :: wxWebView().

如果可以向前瀏覽已瀏覽頁面的歷史記錄,則傳回 true。

-spec canPaste(This) -> boolean() when This :: wxWebView().

如果可以貼上資料,則傳回 true。

注意:在 macOS WebKit 後端上,這會始終傳回 true

-spec canRedo(This) -> boolean() when This :: wxWebView().

如果存在要重做的動作,則傳回 true。

此函式的連結

canSetZoomType(This, Type)

檢視原始碼
-spec canSetZoomType(This, Type) -> boolean() when This :: wxWebView(), Type :: wx:wx_enum().

擷取目前的 HTML 引擎是否支援縮放類型。

傳回:此 HTML 引擎是否支援此縮放類型 (因此可以透過 setZoomType/2 設定)。

-spec canUndo(This) -> boolean() when This :: wxWebView().

如果存在要復原的動作,則傳回 true。

-spec clearHistory(This) -> ok when This :: wxWebView().

清除歷史記錄,這也會移除可見頁面。

注意:這未在 WebKit2GTK+ 後端上實作。

-spec clearSelection(This) -> ok when This :: wxWebView().

清除目前選取項目。

-spec copy(This) -> ok when This :: wxWebView().

複製目前選取項目。

-spec cut(This) -> ok when This :: wxWebView().

剪下目前選取項目。

-spec deleteSelection(This) -> ok when This :: wxWebView().

刪除目前選取項目。

請注意,對於 wxWEBVIEW_BACKEND_WEBKIT,選取的內容必須是可編輯的,可以透過 SetEditable 或正確的 HTML 屬性來實現。

此函式的連結

enableContextMenu(This)

檢視原始碼
-spec enableContextMenu(This) -> ok when This :: wxWebView().

等同於 enableContextMenu(This, [])

-spec enableContextMenu(This, [Option]) -> ok when This :: wxWebView(), Option :: {enable, boolean()}.

啟用或停用右鍵內容功能表。

預設情況下,標準的上下文選單是啟用的,此方法可用於停用它或稍後重新啟用它。

自:2.9.5 版本起。

-spec enableHistory(This) -> ok when This :: wxWebView().

等同於 enableHistory(This, [])

-spec enableHistory(This, [Option]) -> ok when This :: wxWebView(), Option :: {enable, boolean()}.

啟用或停用歷史記錄。

這也會清除歷史記錄。

注意:這未在 WebKit2GTK+ 後端上實作。

-spec find(This, Text) -> integer() when This :: wxWebView(), Text :: unicode:chardata().

等同於 find(This, Text, [])

-spec find(This, Text, [Option]) -> integer()
              when This :: wxWebView(), Text :: unicode:chardata(), Option :: {flags, wx:wx_enum()}.

在目前頁面上尋找片語,如果找到,控制項會將片語捲動到檢視中並選取它。

返回:如果組合搜尋旗標後未找到搜尋字詞,則返回 wxNOT_FOUND。如果首次使用搜尋字詞呼叫,則會返回結果總數。然後,每次使用相同的搜尋字詞呼叫時,它將返回目前比對的編號。

注意:如果旗標 wxWEBVIEW_FIND_ENTIRE_WORDwxWEBVIEW_FIND_MATCH_CASE 變更,此函數將重新啟動搜尋,因為這需要新的搜尋。若要重置搜尋,例如重置醒目提示,請使用空的搜尋字詞呼叫此函數。這在 macOS WebKit 後端上始終返回 wxNOT_FOUND

自:2.9.5 版本起。

-spec getCurrentTitle(This) -> unicode:charlist() when This :: wxWebView().

取得目前網頁的標題,如果沒有標題,則取得其 URL/路徑。

-spec getCurrentURL(This) -> unicode:charlist() when This :: wxWebView().

取得目前顯示的文件 URL。

-spec getPageSource(This) -> unicode:charlist() when This :: wxWebView().

取得目前顯示文件的 HTML 原始碼。

返回:HTML 原始碼,如果目前沒有顯示任何頁面,則返回空字串。

-spec getPageText(This) -> unicode:charlist() when This :: wxWebView().

取得目前頁面的文字。

此函式的連結

getSelectedSource(This)

檢視原始碼
-spec getSelectedSource(This) -> unicode:charlist() when This :: wxWebView().

傳回目前選取的原始碼 (如果有的話)。

-spec getSelectedText(This) -> unicode:charlist() when This :: wxWebView().

傳回目前選取的文字 (如果有的話)。

-spec getZoom(This) -> wx:wx_enum() when This :: wxWebView().

取得頁面的縮放層級。

請參閱 getZoomFactor/1 以取得比 wxWebViewZoom 提供的更精確的縮放比例值。

返回:目前的縮放程度。

-spec getZoomFactor(This) -> number() when This :: wxWebView().

取得頁面的縮放比例。

返回:目前的縮放係數。

自:3.1.4 版本起。

-spec getZoomType(This) -> wx:wx_enum() when This :: wxWebView().

取得目前如何解譯縮放比例。

返回:HTML 引擎目前如何解釋縮放係數。

-spec goBack(This) -> ok when This :: wxWebView().

向後瀏覽已瀏覽頁面的歷史記錄。

僅當 canGoBack/1 返回 true 時有效。

-spec goForward(This) -> ok when This :: wxWebView().

向前瀏覽已瀏覽頁面的歷史記錄。

僅當 canGoForward/1 返回 true 時有效。

-spec hasSelection(This) -> boolean() when This :: wxWebView().

如果存在目前選取項目,則傳回 true。

此函式的連結

isBackendAvailable(Backend)

檢視原始碼
-spec isBackendAvailable(Backend) -> boolean() when Backend :: unicode:chardata().

允許檢查目前是否有特定的後端可用。

自:3.1.4 版本起。

-spec isBusy(This) -> boolean() when This :: wxWebView().

傳回 Web 控制項目前是否忙碌 (例如,載入頁面)。

此函式的連結

isContextMenuEnabled(This)

檢視原始碼
-spec isContextMenuEnabled(This) -> boolean() when This :: wxWebView().

如果會在右鍵按一下時顯示內容功能表,則傳回 true。

自:2.9.5 版本起。

-spec isEditable(This) -> boolean() when This :: wxWebView().

傳回 Web 控制項目前是否可編輯。

-spec loadURL(This, Url) -> ok when This :: wxWebView(), Url :: unicode:chardata().

從 URL 載入網頁。

注意:網頁引擎通常會非同步報告錯誤,因此如果您想知道 URL 是否載入成功,請註冊以接收導覽錯誤事件。

-spec new(Parent, Id) -> wxWebView() when Parent :: wxWindow:wxWindow(), Id :: integer().

等同於 new(Parent, Id, [])

-spec new(Parent, Id, [Option]) -> wxWebView()
             when
                 Parent :: wxWindow:wxWindow(),
                 Id :: integer(),
                 Option ::
                     {url, unicode:chardata()} |
                     {pos, {X :: integer(), Y :: integer()}} |
                     {size, {W :: integer(), H :: integer()}} |
                     {backend, unicode:chardata()} |
                     {style, integer()}.

使用 wxWebViewFactory (在 wx 中未實作) 建立新 wxWebView 的工廠函式。

返回:建立的 wxWebView,如果請求的後端不可用,則返回 NULL

自:2.9.5 版本起。

-spec paste(This) -> ok when This :: wxWebView().

貼上目前資料。

-spec print(This) -> ok when This :: wxWebView().

開啟列印對話方塊,以便使用者列印目前顯示的頁面。

-spec redo(This) -> ok when This :: wxWebView().

重做上次動作。

-spec reload(This) -> ok when This :: wxWebView().

等同於 reload(This, [])

-spec reload(This, [Option]) -> ok when This :: wxWebView(), Option :: {flags, wx:wx_enum()}.

重新載入目前顯示的 URL。

注意:edge 後端會忽略旗標。

此函式的連結

runScript(This, Javascript)

檢視原始碼
-spec runScript(This, Javascript) -> Result
                   when
                       Result :: {Res :: boolean(), Output :: unicode:charlist()},
                       This :: wxWebView(),
                       Javascript :: unicode:chardata().

執行給定的 JavaScript 程式碼。

JavaScript 程式碼在瀏覽器控制項內部執行,並且具有對 DOM 和其他瀏覽器提供功能的完全存取權。例如,此程式碼會將目前頁面的內容取代為提供的字串。

如果 output 不是 null,則在成功執行此程式碼時,會以結果填入它,例如,JavaScript 值,例如字串、數字 (整數或浮點數)、布林值,或非原始類型 (例如陣列和物件) 的 JSON 表示法。例如

此函數有一些特定於平台的限制

  • 在 wxGTK2 中使用 WebKit v1 時,不支援擷取 JavaScript 執行結果,如果 output 不是 null 以指示此情況,此函數將始終返回 false。在 wxGTK3 中使用 WebKit v2 或更高版本時,完全支援此功能。

  • 在 macOS 下使用 WebKit 時,程式碼執行限制為最多 10 MiB 的記憶體和 10 秒的執行時間。

  • 在 MSW 下使用 IE 後端時,只有在目前頁面完全載入 (即收到 wxEVT_WEBVIEW_LOADED 事件) 時,才能執行指令碼。為了執行 JavaScript,需要在頁面 HTML 中包含指令碼標籤。

另請注意,在 MSW 下,預設模擬模式不支援將 JavaScript 物件轉換為 JSON。wxWebView 實作了自己的物件到 JSON 轉換,作為此情況的後備方案,但它不像瀏覽器控制項本身的功能實作那樣功能齊全、經過良好測試或執行良好,因此建議使用 MSWSetEmulationLevel() 將模擬層級變更為更現代的層級,在此層級中,JSON 轉換由控制項本身完成。

返回:如果存在結果則為 true,如果發生錯誤則為 false。

-spec selectAll(This) -> ok when This :: wxWebView().

選取整個頁面。

-spec setEditable(This) -> ok when This :: wxWebView().

等同於 setEditable(This, [])

-spec setEditable(This, [Option]) -> ok when This :: wxWebView(), Option :: {enable, boolean()}.

設定 Web 控制項的可編輯屬性。

啟用後,即使未設定 contenteditable 屬性,使用者也可以編輯頁面。確切的功能會因使用的後端而異。

此函式的連結

setPage(This, Html, BaseUrl)

檢視原始碼
-spec setPage(This, Html, BaseUrl) -> ok
                 when This :: wxWebView(), Html :: unicode:chardata(), BaseUrl :: unicode:chardata().

將顯示的頁面原始碼設定為給定字串的內容。

注意:當使用 wxWEBVIEW_BACKEND_IE 時,您必須等待目前的頁面完成載入,然後才能呼叫 setPage/3。此後端和 edge 後端未使用 baseURL 參數。

-spec setZoom(This, Zoom) -> ok when This :: wxWebView(), Zoom :: wx:wx_enum().

設定頁面的縮放層級。

請參閱 setZoomFactor/2 以取得比 wxWebViewZoom 提供的測量步驟更精確的縮放比例。

此函式的連結

setZoomFactor(This, Zoom)

檢視原始碼
-spec setZoomFactor(This, Zoom) -> ok when This :: wxWebView(), Zoom :: number().

設定頁面的縮放比例。

注意:在 IE 中,縮放比例將轉換為 wxWebViewZoom 層級,適用於 wxWebViewZoomTypewxWEBVIEW_ZOOM_TYPE_TEXT

自:3.1.4 版本起。

此函式的連結

setZoomType(This, ZoomType)

檢視原始碼
-spec setZoomType(This, ZoomType) -> ok when This :: wxWebView(), ZoomType :: wx:wx_enum().

設定如何解譯縮放比例。

注意:請先呼叫 canSetZoomType/2,某些 HTML 渲染器可能不支援所有縮放類型。

-spec stop(This) -> ok when This :: wxWebView().

停止目前的頁面載入程序 (如果有的話)。

可能會觸發 wxWEBVIEW_NAV_ERR_USER_CANCELLED 類型的錯誤事件。TODO:使 wxWEBVIEW_NAV_ERR_USER_CANCELLED 錯誤在各個連接埠中保持一致。

-spec undo(This) -> ok when This :: wxWebView().

復原上次動作。