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/.github/workflows/covector-version-or-publish-v1.yml b/.github/workflows/covector-version-or-publish-v1.yml index a8ca679bf24..77455007427 100644 --- a/.github/workflows/covector-version-or-publish-v1.yml +++ b/.github/workflows/covector-version-or-publish-v1.yml @@ -28,7 +28,7 @@ jobs: } - { target: x86_64-apple-darwin, - os: macos-latest, + os: macos-13, toolchain: '1.60.0' } steps: @@ -116,7 +116,7 @@ jobs: strategy: fail-fast: false matrix: - platform: [ubuntu-latest, macos-latest, windows-latest] + platform: [ubuntu-latest, macos-13, windows-latest] steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index 8f0d3a3f97e..9e1f240c66f 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -43,7 +43,7 @@ jobs: } - { target: x86_64-apple-darwin, - os: macos-latest, + os: macos-13, toolchain: '1.60.0' } features: diff --git a/core/tauri/scripts/init.js b/core/tauri/scripts/init.js index 75761bb587f..a45abd4a1cb 100644 --- a/core/tauri/scripts/init.js +++ b/core/tauri/scripts/init.js @@ -29,6 +29,4 @@ window.__TAURI_INVOKE__('__initialized', { url: window.location.href }) }) } - - __RAW_plugin_initialization_script__ })() diff --git a/core/tauri/src/manager.rs b/core/tauri/src/manager.rs index fd19adcd17a..9050f8b33c3 100644 --- a/core/tauri/src/manager.rs +++ b/core/tauri/src/manager.rs @@ -427,7 +427,7 @@ impl WindowManager { app_handle: AppHandle, ) -> crate::Result> { let is_init_global = self.inner.config.build.with_global_tauri; - let plugin_init = self + let plugin_init_scripts = self .inner .plugins .lock() @@ -471,8 +471,11 @@ impl WindowManager { window_labels_array = serde_json::to_string(&window_labels)?, current_window_label = serde_json::to_string(&label)?, )) - .initialization_script(&self.initialization_script(&ipc_init.into_string(),&pattern_init.into_string(),&plugin_init, is_init_global)?) - ; + .initialization_script(&self.initialization_script(&ipc_init.into_string(),&pattern_init.into_string(),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 Pattern::Isolation { schema, .. } = self.pattern() { @@ -781,7 +784,6 @@ impl WindowManager { &self, ipc_script: &str, pattern_script: &str, - plugin_initialization_script: &str, with_global_tauri: bool, ) -> crate::Result { #[derive(Template)] @@ -801,8 +803,6 @@ impl WindowManager { #[raw] event_initialization_script: &'a str, #[raw] - plugin_initialization_script: &'a str, - #[raw] freeze_prototype: &'a str, #[raw] hotkeys: &'a str, @@ -867,7 +867,6 @@ impl WindowManager { .render_default(&Default::default())? .into_string(), event_initialization_script: &self.event_initialization_script(), - plugin_initialization_script, freeze_prototype, hotkeys: &hotkeys, } diff --git a/core/tauri/src/plugin.rs b/core/tauri/src/plugin.rs index a506d4136fe..f82fd5d410b 100644 --- a/core/tauri/src/plugin.rs +++ b/core/tauri/src/plugin.rs @@ -607,14 +607,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 .values() .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.