WebView
# 1. WebView 是什么?
从本质上讲,WebView 是一个嵌入在你的应用程序中的“迷你”浏览器。
你可以把它理解为一个组件(Component),就像一个按钮、一个文本框一样,只不过这个组件的功能是专门用来显示网页内容的。它使用你操作系统内置的浏览器引擎来渲染 HTML、CSS 和 JavaScript。
- 在 Windows 上,它使用的是 Microsoft Edge WebView2 (基于 Chromium)。
- 在 macOS 和 iOS 上,它使用的是 WKWebView (基于 Safari 的 WebKit 引擎)。
- 在 Linux 上,它使用的是 WebKitGTK。
核心思想是: 开发者不需要为不同的操作系统从头开始用原生代码(如 C++, Swift, Rust)去画每一个界面元素,而是可以直接使用他们已经非常熟悉的 Web 前端技术(HTML, CSS, JavaScript)来构建用户界面(UI)。
# 2. Tauri 为什么使用 WebView?
Tauri 是一个用来构建跨平台桌面应用的框架。它选择使用 WebView 作为其核心,主要有以下几个关键原因:
极小的打包体积:传统的桌面应用框架(比如 Electron)会把整个 Chrome 浏览器内核(Chromium)打包到你的应用里,导致一个简单的 “Hello World” 应用可能就有几十甚至上百 MB。而 Tauri 非常聪明,它不自己带浏览器,而是直接使用操作系统已经内置的 WebView。这样就极大地减小了最终应用程序的体积,通常只有几 MB。
更低的内存占用:由于应用共享了系统内置的 WebView 实例,而不是为每个应用都启动一个独立的浏览器进程,因此内存消耗也显著降低,应用运行起来更加轻快。
跨平台开发:开发者只需要编写一套基于 HTML, CSS, JavaScript (或者使用 React, Vue, Svelte 等框架) 的前端代码,Tauri 就可以通过 WebView 把它展示在 Windows, macOS 和 Linux 上,实现了“一次编写,到处运行”的目标。
原生能力交互:Tauri 不仅仅是简单地显示一个网页。它在 WebView 的基础上,建立了一座“桥梁”,让你的前端 JavaScript 代码可以与后端的 Rust 代码进行通信。这意味着,你可以:
- 在 JavaScript 中调用 Rust 函数来读写本地文件、访问数据库、执行复杂的计算等。
- 在 Rust 中触发事件,然后让前端的 WebView 接收并更新界面。
# 3. Tauri、WebView 和你的代码之间的关系
在 Tauri 项目中,这三者的关系是这样的:
- 你的前端代码 (HTML/CSS/JS):这是你应用的“脸面”,即用户看到和交互的界面。你用你最熟悉的前端框架(如 Vite, Next.js, Nuxt.js 等)来开发这部分。
- WebView:这是操作系统的“翻译官”和“画布”。它负责解析你的前端代码,并将它渲染成用户可以看到的图形界面。它就像一个被限制在你的应用窗口内的浏览器标签页。
- Tauri 后端 (Rust):这是应用的“大脑”和“骨架”。它负责创建窗口、管理菜单、处理文件系统、网络请求等所有需要原生能力的操作。它创建了 WebView 实例,并把你的前端代码加载进去。同时,它通过一个安全的通道与 WebView 里的 JavaScript 进行通信。
整个工作流程可以简化为:
- 你启动 Tauri 应用。
- Tauri 的 Rust 核心启动,并创建一个原生窗口。
- Rust 核心在这个窗口中初始化一个 WebView 组件。
- WebView 加载你写好的 HTML、CSS 和 JavaScript 文件。
- 你的应用界面就显示出来了。当你在界面上进行操作时(比如点击按钮),JavaScript 可以通过 Tauri 提供的 API 调用 Rust 函数来执行底层操作。
# 总结
所以,当你学习 Tauri 时,可以这样理解 WebView:
WebView 是 Tauri 实现其轻量、跨平台目标的关键技术。它是一个由操作系统提供的、能够渲染网页内容的组件,让你可以用前端技术来构建桌面应用的界面,同时 Tauri 负责将这个界面与强大的 Rust 后端能力连接起来,让你两边的优点都能享受到。
简单来说,Tauri 通过 WebView
让你用 Web
技术写桌面应用的View
(视图/界面)。