From e9bbf72b0e6a34558ac5067e7cef3a5be486aa9b Mon Sep 17 00:00:00 2001 From: Simon Laux Date: Sun, 23 Feb 2025 15:58:22 +0100 Subject: [PATCH] feat: add `WebviewBuilder.disable_javascript` and `WebviewWindowBuilder.disable_javascript` --- .changes/disable-javascript.md | 6 ++++++ Cargo.lock | 3 +-- crates/tauri-runtime-wry/Cargo.toml | 2 +- crates/tauri-runtime-wry/src/lib.rs | 4 ++++ crates/tauri-runtime/src/webview.rs | 2 ++ crates/tauri/src/webview/mod.rs | 11 +++++++++++ crates/tauri/src/webview/webview_window.rs | 11 +++++++++++ 7 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 .changes/disable-javascript.md diff --git a/.changes/disable-javascript.md b/.changes/disable-javascript.md new file mode 100644 index 000000000000..2bb3e27ec0a4 --- /dev/null +++ b/.changes/disable-javascript.md @@ -0,0 +1,6 @@ +--- +tauri: 'minor:feat' +tauri-runtime-wry: 'minor:feat' +--- + +Add `WebviewBuilder.disable_javascript` and `WebviewWindowBuilder.disable_javascript` api to disable JavaScript. diff --git a/Cargo.lock b/Cargo.lock index e389fbaf21be..91b6ef9d4b85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10865,8 +10865,7 @@ checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "wry" version = "0.49.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "647c7c6ce36008e30a2a2ffce6176469144982f01b27047939dafc40a4e42cef" +source = "git+https://github.com/Simon-Laux/wry?branch=disable-javascript#4011e4ec85c10fe5e85ddcc1e293ea3365a297e6" dependencies = [ "base64 0.22.1", "block2 0.6.0", diff --git a/crates/tauri-runtime-wry/Cargo.toml b/crates/tauri-runtime-wry/Cargo.toml index 9b431cab8c4f..ba97f5743e4a 100644 --- a/crates/tauri-runtime-wry/Cargo.toml +++ b/crates/tauri-runtime-wry/Cargo.toml @@ -22,7 +22,7 @@ wry = { version = "0.49.0", default-features = false, features = [ "protocol", "os-webview", "linux-body", -] } +], git = "https://github.com/Simon-Laux/wry", branch = "disable-javascript" } tao = { version = "0.32.0", default-features = false, features = ["rwh_06"] } tauri-runtime = { version = "2.3.0", path = "../tauri-runtime" } tauri-utils = { version = "2.1.1", path = "../tauri-utils" } diff --git a/crates/tauri-runtime-wry/src/lib.rs b/crates/tauri-runtime-wry/src/lib.rs index 533ce826f510..4cd1a80e2a55 100644 --- a/crates/tauri-runtime-wry/src/lib.rs +++ b/crates/tauri-runtime-wry/src/lib.rs @@ -4201,6 +4201,10 @@ fn create_webview( }); } + if webview_attributes.javascript_disabled { + webview_builder = webview_builder.with_javascript_disabled(); + } + if let Some(color) = webview_attributes.background_color { webview_builder = webview_builder.with_background_color(color.into()); } diff --git a/crates/tauri-runtime/src/webview.rs b/crates/tauri-runtime/src/webview.rs index 93c8754fe2a5..ff401dd3223f 100644 --- a/crates/tauri-runtime/src/webview.rs +++ b/crates/tauri-runtime/src/webview.rs @@ -218,6 +218,7 @@ pub struct WebviewAttributes { pub devtools: Option, pub background_color: Option, pub background_throttling: Option, + pub javascript_disabled: bool, } impl From<&WindowConfig> for WebviewAttributes { @@ -285,6 +286,7 @@ impl WebviewAttributes { devtools: None, background_color: None, background_throttling: None, + javascript_disabled: false, } } diff --git a/crates/tauri/src/webview/mod.rs b/crates/tauri/src/webview/mod.rs index 7a9d071dc2fe..be02057a6391 100644 --- a/crates/tauri/src/webview/mod.rs +++ b/crates/tauri/src/webview/mod.rs @@ -886,6 +886,17 @@ fn main() { self.webview_attributes.background_throttling = Some(policy); self } + + /// Whether JavaScript should be disabled. + /// + /// ## Platform-specific + /// + /// - **Android:** Not implemented yet. + #[must_use] + pub fn disable_javascript(mut self) -> Self { + self.webview_attributes.javascript_disabled = true; + self + } } /// Webview. diff --git a/crates/tauri/src/webview/webview_window.rs b/crates/tauri/src/webview/webview_window.rs index 22a1e0b74ca0..0fe6283fd9d9 100644 --- a/crates/tauri/src/webview/webview_window.rs +++ b/crates/tauri/src/webview/webview_window.rs @@ -996,6 +996,17 @@ impl> WebviewWindowBuilder<'_, R, M> { self.webview_builder = self.webview_builder.background_throttling(policy); self } + + /// Whether JavaScript should be disabled. + /// + /// ## Platform-specific + /// + /// - **Android:** Not implemented yet. + #[must_use] + pub fn disable_javascript(mut self) -> Self { + self.webview_builder = self.webview_builder.disable_javascript(); + self + } } /// A type that wraps a [`Window`] together with a [`Webview`].