WebView
WebView是一種軟件組件,由作業系統或開發框架提供,用於在原生應用程式內部渲染Web內容,而無需將用戶切換至系統級Web瀏覽器。[1] 它允許開發者將基於HTML、CSS和JavaScript的網頁或Web應用嵌入到桌面或移動應用中,實現原生代碼與Web技術的混合開發模式。[2] WebView廣泛應用於混合移動應用、桌面應用內嵌頁面、OAuth登錄流程及富文本內容展示等場景[1]。
歷史
WebKit的起源
現代WebView技術的根基可追溯至1998年KDE項目開發的KHTML排版引擎與KJS JavaScript引擎。[3] 2001年6月,Apple公司內部啟動WebKit項目,基於KHTML進行fork,旨在為macOS構建專用的瀏覽器引擎。[4] 2003年1月,Steve Jobs在Macworld大會上發布Safari瀏覽器,首次公開採用WebKit引擎。[3] 2005年6月,Apple將WebKit以BSD許可證開源,使其成為跨平台渲染引擎的基礎。[3]
2008年,Google基於WebKit發布Chromium瀏覽器;2013年4月,Google從WebKit fork出Blink引擎,作為Chromium及後續Chrome的渲染核心。[5] 這一分支事件深刻影響了後續各平台WebView組件的技術路線。
移動平台WebView的演進
在Android平台,早期版本的WebView直接集成於作業系統核心,並基於WebKit構建。Android 4.4(KitKat)起,WebView轉向採用Chromium/Blink引擎。[6] Android 5.0(Lollipop)將WebView從系統核心中分離,使其可通過Google Play商店獨立更新,從而縮短安全補丁的推送周期。Android 7至9期間,WebView曾與Chrome瀏覽器合併;自Android 10起,WebView再次成為獨立系統組件,繼續通過Google Play分發更新。[6]
在iOS與macOS平台,Apple於2010年推出WebKit2架構,引入多進程模型與更強的安全性設計。2014年發布的iOS 8與macOS Yosemite中,WKWebView取代舊版UIWebView/WebView成為官方推薦的嵌入組件。[7] 舊版macOS WebView類已於macOS 10.14(Mojave)中被標記為棄用。[7]
Windows平台的發展
Microsoft Windows長期依賴Internet Explorer的Trident引擎提供WebBrowser控件。隨着Edge瀏覽器的推出,Microsoft開發了基於EdgeHTML的WebView控件。2020年,Microsoft正式發布WebView2,該控件基於Chromium內核的Microsoft Edge,支持Win32、WPF、Windows Forms及WinUI 3等多種Windows開發框架,並向下兼容至Windows 7。[8]
技術分類
根據W3C WebView社區組的定義,WebView按功能與集成深度可分為兩類:[1]
類瀏覽器WebView(Browser-like WebViews):API表面較為簡單,主要用於加載和顯示網頁內容。這類WebView通常不提供對渲染內容的深度訪問權限,且與系統級瀏覽器共享Cookie、緩存等狀態數據。[1]
全功能WebView(Fully-fledged WebViews):提供深度的原生與Web集成能力,允許宿主應用完全控制用戶體驗、讀取和修改Web內容,並建立原生代碼與Web代碼之間的雙向通信通道。此類WebView通常不共享系統瀏覽器的狀態數據,具備更強的隔離性。[1]
主要平台實現
iOS與macOS
Apple平台當前採用WKWebView作為官方WebView實現。WKWebView基於WebKit2架構,將Web內容運行在獨立進程中,與宿主應用隔離,從而提升安全性與穩定性。[7] 2025年,Apple在iOS 26、macOS 26及visionOS 3的SwiftUI中引入了新的原生WebView視圖,進一步簡化了聲明式UI框架下的Web內容嵌入流程。[9]
Android
Android System WebView是基於開源Chromium項目的系統組件,為所有依賴WebView的第三方應用提供統一的Web渲染能力。[6] 由於其為系統關鍵組件,Google不建議用戶卸載或禁用WebView更新,否則可能導致依賴該組件的應用無法正常工作,並帶來安全風險。[6]
Windows
Microsoft Edge WebView2是Windows平台的現代WebView解決方案。它使用Microsoft Edge(Chromium版)作為渲染引擎,通過Evergreen Runtime模式保持自動更新,開發者亦可選擇固定版本Runtime進行分發。[8] WebView2支持通過COM接口與宿主應用通信,並提供對DOM、Cookie、DevTools等瀏覽器功能的編程訪問。
Linux
Linux桌面環境通常採用WebKitGTK作為WebView實現。WebKitGTK是WebKit引擎的GTK移植版本,被GNOME Web(Epiphany)等瀏覽器及大量桌面應用採用。[10]
跨平台開發庫
除作業系統原生提供的WebView組件外,開發者社區亦創建了多款跨平台WebView封裝庫,以簡化多平台桌面應用的開發。其中,webview/webview是一個輕量級的C/C++庫,在Windows上調用Edge WebView2,在macOS上調用Cocoa/WebKit,在Linux上調用GTK/WebKitGTK,實現了一套API下的跨平台Web內容嵌入。[11] 類似地,Tauri、Wails等現代桌面應用框架亦依賴系統原生WebView作為其前端渲染層,以避免內嵌完整瀏覽器引擎帶來的體積開銷。
參考文獻
- ↑ 1.0 1.1 1.2 1.3 1.4 WebView: Usage Scenarios and Challenges - W3C WebView Community Group
- ↑ What is a WebView app, and when should you build one? - Median
- ↑ 3.0 3.1 3.2 The Butthurt Fork - KHTML to WebKit Timeline
- ↑ GitHub - liamzebedee/webkit-source-archive
- ↑ Google Forks WebKit - smist08
- ↑ 6.0 6.1 6.2 6.3 What is Android System WebView and should you uninstall it? - TechTarget
- ↑ 7.0 7.1 7.2 WebView is deprecated in macOS 10.14 - GitHub webview/webview
- ↑ 8.0 8.1 WebView2 API Reference - Microsoft Learn
- ↑ How to Display Web Content in SwiftUI Using WebView - Swift Programming
- ↑ WebKit - The Apple Wiki
- ↑ GitHub - webview/webview