フロントエンドからイベントを発火し、Rust 側でそれを受信する方法を解説します。
invoke(コマンド呼び出し、リクエスト/レスポンス型)とは異なり、一方向の通知や、他のウィンドウへのブロードキャストに適しています。
フロントエンド側の実装
@tauri-apps/api/event の emit 関数を使用します。
import { emit } from '@tauri-apps/api/event';
async function notifyRust() {
await emit('frontend-event', { status: 'ready', timestamp: Date.now() });
}
Rust 側の実装
app.listen (または window.listen, webview.listen) で受信します。
編集ファイル: src-tauri/src/lib.rs
use tauri::Listener;
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.setup(|app| {
app.listen("frontend-event", |event| {
println!("Received event from JS: {}", event.payload());
});
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
※ フロントエンドから emit したイベントは、すべてのウィンドウ(および Rust)のリスナーに届きます(ブロードキャスト)。
自分のウィンドウだけに送りたい場合や、特定のウェブビューだけに送りたい場合は、ターゲット指定付きの emit (window.emit 等) を検討するか、素直に invoke を使うのが良いでしょう。