Skip to content

Commit

Permalink
fix(core): invoke key injection on regular JS scripts, closes #2342 (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
lucasfernog committed Aug 3, 2021
1 parent 6e0dbf6 commit d0142e8
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 17 deletions.
6 changes: 6 additions & 0 deletions .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.
59 changes: 42 additions & 17 deletions core/tauri-utils/src/html.rs
Expand Up @@ -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();
Expand Down

0 comments on commit d0142e8

Please sign in to comment.