From ebd3dcb92f8c0381daf6f5fdb2eaeef05f11bb6c Mon Sep 17 00:00:00 2001 From: Tony <68118705+Legend-Master@users.noreply.github.com> Date: Fri, 4 Apr 2025 16:06:22 +0800 Subject: [PATCH] enhance(core): change eval to take `Into` (#13135) --- .changes/eval-take-into-string.md | 5 +++++ crates/tauri/src/ipc/channel.rs | 4 ++-- crates/tauri/src/ipc/protocol.rs | 4 ++-- crates/tauri/src/webview/mod.rs | 14 +++++++++----- crates/tauri/src/webview/webview_window.rs | 2 +- 5 files changed, 19 insertions(+), 10 deletions(-) create mode 100644 .changes/eval-take-into-string.md diff --git a/.changes/eval-take-into-string.md b/.changes/eval-take-into-string.md new file mode 100644 index 000000000..212664c2e --- /dev/null +++ b/.changes/eval-take-into-string.md @@ -0,0 +1,5 @@ +--- +tauri: patch:enhance +--- + +`Webview::eval` and `WebviewWindow::eval` now takes `impl Into` instead of `&str` to allow passing the scripts more flexible and efficiently diff --git a/crates/tauri/src/ipc/channel.rs b/crates/tauri/src/ipc/channel.rs index 14f8e41e3..01c847411 100644 --- a/crates/tauri/src/ipc/channel.rs +++ b/crates/tauri/src/ipc/channel.rs @@ -128,7 +128,7 @@ impl JavaScriptChannelId { .unwrap() .insert(data_id, body); - webview.eval(&format!( + webview.eval(format!( "window.__TAURI_INTERNALS__.invoke('{FETCH_CHANNEL_DATA_COMMAND}', null, {{ headers: {{ '{CHANNEL_ID_HEADER_NAME}': '{data_id}' }} }}).then((response) => window['_' + {}]({{ message: response, id: {i} }})).catch(console.error)", callback_id.0 ))?; @@ -192,7 +192,7 @@ impl Channel { .unwrap() .insert(data_id, body); - webview.eval(&format!( + webview.eval(format!( "window.__TAURI_INTERNALS__.invoke('{FETCH_CHANNEL_DATA_COMMAND}', null, {{ headers: {{ '{CHANNEL_ID_HEADER_NAME}': '{data_id}' }} }}).then((response) => window['_' + {}](response)).catch(console.error)", callback.0 ))?; diff --git a/crates/tauri/src/ipc/protocol.rs b/crates/tauri/src/ipc/protocol.rs index 07de32b19..ecea21dd9 100644 --- a/crates/tauri/src/ipc/protocol.rs +++ b/crates/tauri/src/ipc/protocol.rs @@ -331,7 +331,7 @@ fn handle_ipc_message(request: Request, manager: &AppManager .expect("unable to serialize response error string to json"), }; - let _ = webview.eval(&eval_js); + let _ = webview.eval(eval_js); } let can_use_channel_for_response = cmd @@ -423,7 +423,7 @@ fn handle_ipc_message(request: Request, manager: &AppManager #[cfg(feature = "tracing")] tracing::trace!("ipc.request.error {}", e); - let _ = webview.eval(&format!( + let _ = webview.eval(format!( r#"console.error({})"#, serde_json::Value::String(e.to_string()) )); diff --git a/crates/tauri/src/webview/mod.rs b/crates/tauri/src/webview/mod.rs index 7b8aaecf0..af6aa8ee7 100644 --- a/crates/tauri/src/webview/mod.rs +++ b/crates/tauri/src/webview/mod.rs @@ -1578,8 +1578,12 @@ fn main() { } /// Evaluates JavaScript on this window. - pub fn eval(&self, js: &str) -> crate::Result<()> { - self.webview.dispatcher.eval_script(js).map_err(Into::into) + pub fn eval(&self, js: impl Into) -> crate::Result<()> { + self + .webview + .dispatcher + .eval_script(js.into()) + .map_err(Into::into) } /// Register a JS event listener and return its identifier. @@ -1593,7 +1597,7 @@ fn main() { let id = listeners.next_event_id(); - self.eval(&crate::event::listen_js_script( + self.eval(crate::event::listen_js_script( listeners.listeners_object_name(), &serde_json::to_string(&target)?, event, @@ -1610,7 +1614,7 @@ fn main() { pub(crate) fn unlisten_js(&self, event: EventName<&str>, id: EventId) -> crate::Result<()> { let listeners = self.manager().listeners(); - self.eval(&crate::event::unlisten_js_script( + self.eval(crate::event::unlisten_js_script( listeners.listeners_object_name(), event, id, @@ -1622,7 +1626,7 @@ fn main() { } pub(crate) fn emit_js(&self, emit_args: &EmitArgs, ids: &[u32]) -> crate::Result<()> { - self.eval(&crate::event::emit_js_script( + self.eval(crate::event::emit_js_script( self.manager().listeners().function_name(), emit_args, &serde_json::to_string(ids)?, diff --git a/crates/tauri/src/webview/webview_window.rs b/crates/tauri/src/webview/webview_window.rs index 540f22650..60168356d 100644 --- a/crates/tauri/src/webview/webview_window.rs +++ b/crates/tauri/src/webview/webview_window.rs @@ -1969,7 +1969,7 @@ impl WebviewWindow { } /// Evaluates JavaScript on this window. - pub fn eval(&self, js: &str) -> crate::Result<()> { + pub fn eval(&self, js: impl Into) -> crate::Result<()> { self.webview.eval(js) }