Desktop: release builds on Windows turn off the WebView2 browser context menu and accelerator keys

This commit is contained in:
CRTkafa 2026-10-23 08:59:13 +08:00
parent e4ebbb825d
commit 944b24fe59
3 changed files with 30 additions and 0 deletions

View file

@ -4124,6 +4124,8 @@ dependencies = [
"tempfile",
"tokio",
"url",
"webview2-com",
"windows-core",
"zip",
]

View file

@ -49,6 +49,11 @@ reqwest = { version = "0.13", default-features = false, features = ["rustls-no-p
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12"] }
zip = { version = "4", default-features = false, features = ["deflate-flate2-zlib-rs"] }
# Release builds turn off WebView2's browser context menu and accelerator keys (Back, Refresh, Print, Save as).
[target.'cfg(windows)'.dependencies]
webview2-com = "0.39"
windows-core = "0.62"
[dev-dependencies]
tempfile = "3"

View file

@ -232,6 +232,10 @@ pub fn run() {
.plugin(tauri_plugin_updater::Builder::new().build())
.plugin(tauri_plugin_process::init())
.setup(|app| {
#[cfg(all(windows, not(debug_assertions)))]
if let Some(w) = app.get_webview_window(policy::MAIN) {
harden_webview(&w);
}
let data_dir = app.path().app_data_dir()?;
logs::init(&data_dir, app.path().home_dir().ok().map(|h| h.to_string_lossy().to_string()));
logs::panic_hook();
@ -381,3 +385,22 @@ pub fn run() {
_ => {}
});
}
/// Release builds on Windows: no WebView2 browser context menu (Back, Refresh, Save as, Print, More tools) and no
/// browser accelerator keys (Ctrl+R, Ctrl+P, F5, Ctrl+Shift+I...). The page draws its own menus; dev keeps devtools.
#[cfg(all(windows, not(debug_assertions)))]
fn harden_webview(w: &tauri::WebviewWindow) {
use webview2_com::Microsoft::Web::WebView2::Win32::ICoreWebView2Settings3;
use windows_core::Interface;
let r = w.with_webview(|wv| unsafe {
let Ok(core) = wv.controller().CoreWebView2() else { return };
let Ok(s) = core.Settings() else { return };
let _ = s.SetAreDefaultContextMenusEnabled(false);
if let Ok(s3) = s.cast::<ICoreWebView2Settings3>() {
let _ = s3.SetAreBrowserAcceleratorKeysEnabled(false);
}
});
if let Err(e) = r {
logs::host("warn", &format!("webview menus not turned off: {e}"));
}
}