Bladeren bron

fix(core): run plugin init script in a separate context (#9570)

* fix(core): run plugin init script in a separate context

* fix ci
Lucas Fernandes Nogueira 1 jaar geleden
bovenliggende
commit
3e98145ac3

+ 5 - 0
.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.

+ 2 - 2
.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

+ 1 - 1
.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:

+ 0 - 2
core/tauri/scripts/init.js

@@ -29,6 +29,4 @@
       window.__TAURI_INVOKE__('__initialized', { url: window.location.href })
     })
   }
-
-  __RAW_plugin_initialization_script__
 })()

+ 6 - 7
core/tauri/src/manager.rs

@@ -427,7 +427,7 @@ impl<R: Runtime> WindowManager<R> {
     app_handle: AppHandle<R>,
   ) -> crate::Result<PendingWindow<EventLoopMessage, R>> {
     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<R: Runtime> WindowManager<R> {
         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<R: Runtime> WindowManager<R> {
     &self,
     ipc_script: &str,
     pattern_script: &str,
-    plugin_initialization_script: &str,
     with_global_tauri: bool,
   ) -> crate::Result<String> {
     #[derive(Template)]
@@ -801,8 +803,6 @@ impl<R: Runtime> WindowManager<R> {
       #[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<R: Runtime> WindowManager<R> {
       .render_default(&Default::default())?
       .into_string(),
       event_initialization_script: &self.event_initialization_script(),
-      plugin_initialization_script,
       freeze_prototype,
       hotkeys: &hotkeys,
     }

+ 3 - 4
core/tauri/src/plugin.rs

@@ -607,14 +607,13 @@ impl<R: Runtime> PluginStore<R> {
   }
 
   /// Generates an initialization script from all plugins in the store.
-  pub(crate) fn initialization_script(&self) -> String {
+  pub(crate) fn initialization_script(&self) -> Vec<String> {
     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.