JavaScript API 提供了一个接口,Web 应用程序(使用 HTML、CSS 和 JavaScript 构建)可以通过该接口与 Tauri 的 Rust 后端进行通信。本文档解释了 Tauri JavaScript API 的结构、架构和用法模式,重点介绍了前端代码如何通过 Tauri 的安全桥接与操作系统原生功能进行交互。
有关支撑此 API 的进程间通信 (IPC) 系统的详细信息,请参阅 IPC 和通信。
JavaScript API 组织为一组模块,可以从 @tauri-apps/api 包中导入。这些模块提供了对各种 Tauri 功能的访问,包括窗口管理、文件系统访问和应用程序控制。
来源
JavaScript API 作为 npm 包 (@tauri-apps/api) 分发,其模块化组织允许开发人员仅导入他们需要的功能。
来源
核心 API 提供了 JavaScript 和 Rust 之间通信的基础机制。
invoke 函数是使用 JavaScript 执行 Rust 命令的主要方法。
此函数接受命令名称、可选参数,并将它们发送到 Rust 后端,返回一个解析了命令结果的 Promise。
要实现 JavaScript 和 Rust 之间的数据流,API 提供了 Channel 类。
Channel 提供了一种处理 JavaScript 前端和 Rust 后端之间连续数据流的方法。
Resource 类代表由 Rust 后端支持的资源。
资源引用存在于 Rust 进程中的数据,可以从 JavaScript 进行管理。
来源
JavaScript API 使用一种特殊的 IPC 机制与 Rust 后端通信。这包括:
IPC 机制利用特殊的序列化协议来处理复杂数据类型。
对象可以通过实现自定义序列化方法来控制它们在 IPC 边界上的传递方式。
来源
核心模块提供 IPC 通信的基本功能。
| 函数/类 | 描述 |
|---|---|
invoke() | 向 Rust 后端发送命令 |
convertFileSrc() | 将文件路径转换为可在 webview 中使用的 URL |
渠道 | 实现双向流式通信 |
资源 | 代表由 Rust 后端管理的资源 |
transformCallback() | 用于处理回调函数的内部实用程序 |
来源
App 模块提供对应用程序元数据和控制的访问。
| 功能 | 描述 |
|---|---|
getVersion() | 返回应用程序版本 |
getName() | 返回应用程序名称 |
getTauriVersion() | 返回 Tauri 框架版本 |
getIdentifier() | 返回应用程序标识符 |
show() | 显示应用程序(macOS) |
hide() | 隐藏应用程序(macOS) |
setTheme() | 设置应用程序主题 |
setDockVisibility() | 控制 Dock 可见性(macOS) |
来源
提供对窗口管理功能的访问。
| 类/函数 | 描述 |
|---|---|
窗口 | 代表应用程序窗口 |
WebviewWindow | 创建和管理应用程序窗口 |
getCurrent() | 获取当前窗口 |
getAll() | 获取所有应用程序窗口 |
LogicalSize/PhysicalSize | 窗口大小实用程序 |
LogicalPosition/PhysicalPosition | 窗口位置实用程序 |
来源
JavaScript API 与 Tauri 的权限系统交互,该系统控制对原生功能的访问。
在通过以下方式调用命令时执行权限检查:
checkPermissions(plugin):检查是否授予了权限。requestPermissions(plugin):向用户请求权限。来源
Tauri JavaScript API 通过一个引导过程进行初始化。
__TAURI_INTERNALS__ 注入到 window 对象中。来源
下图说明了 JavaScript API 的典型使用流程。
来源
JavaScript API 提供了一种使用 asset 协议安全访问本地文件的机制。
这会将本地文件路径转换为可在 webview 中使用的 URL,同时通过 Tauri 的 asset 协议确保安全性。
为了处理连续数据流或多个响应,Channel API 提供了双向通信。
这允许 JavaScript 和 Rust 之间进行实时通信。
来源
Tauri JavaScript API 提供了连接 Web 技术和原生功能的功能齐全的桥梁。通过利用 invoke 机制、Channel 和资源,JavaScript 应用程序可以安全地与 Rust 代码通信以访问系统功能,同时保持 Tauri 提供的安全保障。
模块化结构允许开发人员仅导入他们需要的功能,从而减小包大小并提高性能。权限系统确保对原生功能的访问受到控制和保护。