當你的 WebView2 應用程式使用者前往不同的網頁、URL 或檔案路徑時,這就是 一個導覽。 每個導航都會觸發一連串與導航相關的事件。 你的 WebView2 應用程式原生部分會監聽這些導航事件並處理它們。
當 WebView2 實例中顯示的內容發生特定的非同步動作時,導航事件就會執行。 例如,當 WebView2 使用者瀏覽到新網站時,原生內容會透過監聽事件來監聽 NavigationStarting 變更。 當導航動作完成後,就會 NavigationCompleted 執行。
支援平台:Win32、Windows Forms、WinUI、WPF。
Standard 事件序列
以下是導航每個步驟中通常會觸發的事件序列:
| 順序 | 事件 | 描述 | API 參考概述 |
|---|---|---|---|
| 1 | NavigationStarting |
WebView2 開始導航,導航結果會產生網路請求。 主辦方可在活動期間拒絕此請求。 | 封鎖不受歡迎的導航 |
| 2 | SourceChanged |
WebView2 的來源會改成新的網址。 事件可能源自未引起網路請求的導航動作,例如片段 導航。 | 航行歷史 |
| 3 | ContentLoading |
WebView2 開始載入新頁面的內容。 | 導航活動 |
| 4 | HistoryChanged |
導覽會更新 WebView2 的歷史紀錄。 | 航行歷史 |
| 5 | BasicAuthenticationRequested |
當 WebView 遇到 Basic HTTP 認證請求時會被觸發。 請參閱 WebView2 應用程式的基本認證。 | 驗證 |
| 6 | DOMContentLoaded |
WebView2 已經完成解析 DOM 內容,但還沒載入頁面上的所有圖片、腳本和其他內容。 | 導航活動 |
| 7 | NavigationCompleted |
WebView2 完成新頁面的內容載入。 | 導航活動 |
導航識別碼
上圖顯示了在該eventArgs物件上具有相同NavigationId性質的導航事件。
利用 NavigationId 每個導航事件 eventArgs 物件的屬性,追蹤每個新文件的導航事件。 每次導航都包含一連串的導航事件。 每當成功導覽到新文件時,該 NavigationId 數值就會改變。
具有不同導航 ID 的導航事件可能會重疊。 例如,當你啟動導航事件時,必須等待相關 NavigationStarting 事件。
NavigationStarting事件由物件上的NavigationStartingEventArgs屬性來識別NavigationId。 接著你再開始另一個導航,你會看到以下序列:
-
NavigationStarting這是首次航行的事件。 - 第二次航行事件
NavigationStarting。 -
NavigationCompleted這是首次航行的事件。 - 所有其他適合第二次導航的導航事件。
在錯誤情況下,是否會發生 ContentLoading 事件,取決於導覽是否繼續到錯誤頁面。
如果發生 HTTP 重定向,會連續出現多個 NavigationStarting 事件,後續事件參數設定了 IsRedirect 該屬性;但導航 ID 保持不變。
同文件的導航事件,例如在同一文件中導航到某個片段,不會觸發 NavigationStarting 事件,也不會改變導航 ID。
框架導航
要監控或取消 WebView2 實例中框架內的導航事件,請使用等效的框架相關 API 與事件。 請參閱 WebView2 應用程式中使用框架。
導航範例程式碼
例如,示範如何處理導航事件的程式碼,請參見:
- 了解 WinUI 2 (UWP) 應用程式中的導航事件——文章中沒有範例程式碼;請參閱其他框架的文章。
- 步驟 8 - 在WinUI 3 (Windows App SDK) 應用程式中,用 WebView2 開始處理導航事件。
- 步驟 7 - 在 WPF 應用程式中開始使用 WebView2 的導航事件。
- 步驟 8 - 在 WinForms 應用程式中開始使用 WebView2 的導航事件。
- 步驟 13 - 在 Win32 應用程式中開始使用 WebView2 的導航事件。
WebView2 範例應用程式也示範如何處理導航事件。
另請參閱
- 在 WebView2 API 概覽中瀏覽頁面並管理已載入內容
- WebView2 應用程式的基本認證
- 開始使用 WebView2
- WebView2Samples 儲存庫 ——WebView2 功能的完整範例。
- WebView2 API 參考