Explorar o código

fix(core): invoke key injection on regular JS scripts, closes #2342 (#2344)

Lucas Fernandes Nogueira %!s(int64=4) %!d(string=hai) anos
pai
achega
d0142e87dd
Modificáronse 2 ficheiros con 48 adicións e 17 borrados
  1. 6 0
      .changes/regular-script-invoke-key-injection.md
  2. 42 17
      core/tauri-utils/src/html.rs

+ 6 - 0
.changes/regular-script-invoke-key-injection.md

@@ -0,0 +1,6 @@
+---
+"tauri-utils": patch
+"tauri": patch
+---
+
+Inject the invoke key on regular `<script></script>` tags.

+ 42 - 17
core/tauri-utils/src/html.rs

@@ -19,29 +19,54 @@ pub fn inject_invoke_key_token(document: &mut NodeRef) {
       let element = node.as_element().unwrap();
 
       let attrs = element.attributes.borrow();
-      // if the script is external (has `src`) or its type is not "module", we won't inject the token
-      if attrs.get("src").is_some() || attrs.get("type") != Some("module") {
+      // if the script is external (has `src`), we won't inject the token
+      if attrs.get("src").is_some() {
         continue;
       }
 
-      let replacement_node = NodeRef::new_element(
-        QualName::new(None, ns!(html), "script".into()),
-        element
-          .attributes
-          .borrow()
-          .clone()
-          .map
-          .into_iter()
-          .collect::<Vec<_>>(),
-      );
-      let script = node.text_contents();
-      replacement_node.append(NodeRef::new_text(format!(
-        r#"
+      let replacement_node = match attrs.get("type") {
+        Some("module") | Some("application/ecmascript") => {
+          let replacement_node = NodeRef::new_element(
+            QualName::new(None, ns!(html), "script".into()),
+            element
+              .attributes
+              .borrow()
+              .clone()
+              .map
+              .into_iter()
+              .collect::<Vec<_>>(),
+          );
+          let script = node.text_contents();
+          replacement_node.append(NodeRef::new_text(format!(
+            r#"
           const __TAURI_INVOKE_KEY__ = __TAURI__INVOKE_KEY_TOKEN__;
           {}
         "#,
-        script
-      )));
+            script
+          )));
+          replacement_node
+        }
+        Some("application/javascript") | None => {
+          let replacement_node = NodeRef::new_element(
+            QualName::new(None, ns!(html), "script".into()),
+            element
+              .attributes
+              .borrow()
+              .clone()
+              .map
+              .into_iter()
+              .collect::<Vec<_>>(),
+          );
+          let script = node.text_contents();
+          replacement_node.append(NodeRef::new_text(
+            script.replace("__TAURI_INVOKE_KEY__", "__TAURI__INVOKE_KEY_TOKEN__"),
+          ));
+          replacement_node
+        }
+        _ => {
+          continue;
+        }
+      };
 
       node.insert_after(replacement_node);
       node.detach();