From eff778b8f0c675fda3f6f6d1041bc94afd765d1c Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Sun, 28 Apr 2024 11:15:29 -0300 Subject: [PATCH] fix(core): run plugin init script in a separate context (#9571) --- .changes/plugin-init-script-context.md | 5 +++++ core/tauri/scripts/init.js | 2 -- core/tauri/src/manager/webview.rs | 11 +++++------ core/tauri/src/plugin.rs | 7 +++---- 4 files changed, 13 insertions(+), 12 deletions(-) create mode 100644 .changes/plugin-init-script-context.md diff --git a/.changes/plugin-init-script-context.md b/.changes/plugin-init-script-context.md new file mode 100644 index 00000000000..ba3f59bd394 --- /dev/null +++ b/.changes/plugin-init-script-context.md @@ -0,0 +1,5 @@ +--- +"tauri": patch:enhance +--- + +Run each plugin initialization script on its own context so they do not interfere with each other or the Tauri init script. diff --git a/core/tauri/scripts/init.js b/core/tauri/scripts/init.js index 3f766afad65..fd2983981ec 100644 --- a/core/tauri/scripts/init.js +++ b/core/tauri/scripts/init.js @@ -14,6 +14,4 @@ __RAW_event_initialization_script__ __RAW_bundle_script__ - - __RAW_plugin_initialization_script__ })() diff --git a/core/tauri/src/manager/webview.rs b/core/tauri/src/manager/webview.rs index be4d0eb84fb..f1bd7903322 100644 --- a/core/tauri/src/manager/webview.rs +++ b/core/tauri/src/manager/webview.rs @@ -133,7 +133,7 @@ impl WebviewManager { let app_manager = manager.manager(); let is_init_global = app_manager.config.app.with_global_tauri; - let plugin_init = app_manager + let plugin_init_scripts = app_manager .plugins .lock() .expect("poisoned plugin store") @@ -199,10 +199,13 @@ impl WebviewManager { app_manager, &ipc_init.into_string(), &pattern_init.into_string(), - &plugin_init, is_init_global, )?); + for plugin_init_script in plugin_init_scripts { + webview_attributes = webview_attributes.initialization_script(&plugin_init_script); + } + #[cfg(feature = "isolation")] if let crate::Pattern::Isolation { schema, .. } = &*app_manager.pattern { webview_attributes = webview_attributes.initialization_script( @@ -345,7 +348,6 @@ impl WebviewManager { app_manager: &AppManager, ipc_script: &str, pattern_script: &str, - plugin_initialization_script: &str, with_global_tauri: bool, ) -> crate::Result { #[derive(Template)] @@ -362,8 +364,6 @@ impl WebviewManager { #[raw] event_initialization_script: &'a str, #[raw] - plugin_initialization_script: &'a str, - #[raw] freeze_prototype: &'a str, } @@ -398,7 +398,6 @@ impl WebviewManager { app_manager.listeners().function_name(), app_manager.listeners().listeners_object_name(), ), - plugin_initialization_script, freeze_prototype, } .render_default(&Default::default()) diff --git a/core/tauri/src/plugin.rs b/core/tauri/src/plugin.rs index a57178d2ac3..fbc7292ad8a 100644 --- a/core/tauri/src/plugin.rs +++ b/core/tauri/src/plugin.rs @@ -783,14 +783,13 @@ impl PluginStore { } /// Generates an initialization script from all plugins in the store. - pub(crate) fn initialization_script(&self) -> String { + pub(crate) fn initialization_script(&self) -> Vec { self .store .iter() .filter_map(|p| p.initialization_script()) - .fold(String::new(), |acc, script| { - format!("{acc}\n(function () {{ {script} }})();") - }) + .map(|script| format!("(function () {{ {script} }})();")) + .collect() } /// Runs the created hook for all plugins in the store.