Desktop: release builds on Windows turn off the WebView2 browser context menu and accelerator keys
This commit is contained in:
parent
e4ebbb825d
commit
944b24fe59
3 changed files with 30 additions and 0 deletions
2
apps/desktop/src-tauri/Cargo.lock
generated
2
apps/desktop/src-tauri/Cargo.lock
generated
|
|
@ -4124,6 +4124,8 @@ dependencies = [
|
|||
"tempfile",
|
||||
"tokio",
|
||||
"url",
|
||||
"webview2-com",
|
||||
"windows-core",
|
||||
"zip",
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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}"));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue