如何禁止WebView2中显示网页源代码及禁用CTRL-U快捷键
WebView2禁用Ctrl+U查看源代码解决方案
核心实现方案
WebView2默认的页面操作快捷键可以通过CoreWebView2的AcceleratorKeyPressed事件统一拦截,是目前最可靠的实现方式,逻辑为:匹配到Ctrl+U组合键触发事件时,将事件的Handled属性设为true,即可阻止该快捷键的默认行为。
WinForms/WPF 代码示例
// 需要等待CoreWebView2初始化完成后再绑定事件 webView21.CoreWebView2InitializationCompleted += (s, e) => { webView21.CoreWebView2.AcceleratorKeyPressed += (sender, args) => { // 0x55是字母U的虚拟键码,匹配Ctrl+U组合 if (args.VirtualKey == 0x55 && args.Modifiers == CoreWebView2KeyModifiers.Control) { args.Handled = true; } }; };
Win32/C++ 代码示例
HRESULT hr = m_webView->add_AcceleratorKeyPressed( Callback<ICoreWebView2AcceleratorKeyPressedEventHandler>( [](ICoreWebView2* sender, ICoreWebView2AcceleratorKeyPressedEventArgs* args) -> HRESULT { COREWEBVIEW2_KEY_EVENT_KIND eventKind; args->get_KeyEventKind(&eventKind); // 只处理按键按下事件 if (eventKind == COREWEBVIEW2_KEY_EVENT_KIND_KEY_DOWN) { UINT virtualKey; COREWEBVIEW2_KEY_MODIFIERS modifiers; args->get_VirtualKey(&virtualKey); args->get_Modifiers(&modifiers); // 匹配Ctrl+U组合键 if (virtualKey == 0x55 && modifiers == COREWEBVIEW2_KEY_MODIFIERS_CONTROL) { args->put_Handled(TRUE); } } return S_OK; }).Get(), nullptr);
补充JS端拦截方案
如果需要额外加固,可以通过WebView2的ExecuteScriptAsync方法向页面注入如下JS代码,在页面层拦截键盘事件:
document.addEventListener('keydown', function(e) { if (e.ctrlKey && e.key.toLowerCase() === 'u') { e.preventDefault(); e.stopImmediatePropagation(); return false; } });
注意事项
- 必须等待
CoreWebView2初始化完成后再绑定AcceleratorKeyPressed事件,否则会出现空引用异常。 - 该方案可以和已有的
AreDevToolsEnabled=false配置配合使用,完全禁止用户通过快捷键访问调试相关功能。
内容的提问来源于stack exchange,提问作者Atropo
相关产品推荐
相关产品推荐

