在 Tauri 2.0 框架中,Rust 和前端之间的相互调用是一个重要的功能。对于 Rust 调用前端的操作,可以通过 Tauri 的事件系统来实现。以下是具体的步骤和示例代码:
- 触发全局事件:在 Rust 中,你可以使用 AppHandle 的 emit 方法来触发一个全局事件,该事件可以被前端中的所有 Webview 监听到。例如,你可以定义一个命令,使用 #[tauri::command] 属性,并在该命令中调用 emit 方法来发送事件和数据给前端 2。
use tauri::{AppHandle, Emitter};
#[tauri::command]
fn login(app: AppHandle, user: String, password: String) {
let authenticated = user == "tauri-apps" && password == "tauri";
let result = if authenticated { "loggedIn" } else { "invalidCredentials" };
app.emit("login", result).unwrap();
}
- 触发指定 Webview 的事件:如果你想触发特定 Webview 的事件,可以使用 emit_to 方法,并指定 Webview 的 ID 或标签。例如,你可以使用 EventTarget 枚举来指定目标 2。
- 前端监听事件:在前端,你可以使用 Tauri API 提供的 listen 函数来监听 Rust 发出的事件。你可以指定事件的类型,并提供一个回调函数来处理事件 2。
import { listen } from '@tauri-apps/api/event';
listen<string>('login', (event) => {
console.log(Login result: ${event.payload}
);
});
- 执行 JavaScript 代码:除了事件系统,Rust 也可以直接在 Webview 中执行 JavaScript 代码,使用 eval 方法。这可以用来实现更复杂的交互或自动化任务 2。
use tauri::Manager;
tauri::Builder::default()
.setup(|app| {
let webview = app.get_webview_window("main").unwrap();
webview.eval("console.log('hello from Rust')")?;
Ok(())
});
通过这些方法,你可以实现 Rust 和前端之间的有效通信,无论是发送事件、监听事件还是执行 JavaScript 代码。这些功能在 Tauri 2.0 框架中得到了很好的支持和文档化,你可以参考官方文档获取更多详细信息 3。
版权归原作者 Ruber. 所有, 如有侵权,请联系我们删除。