WPF WebView2 - 无法禁用右键菜单

6

环境: Windows 10 Pro - 版本号 1903, VS2019 最新版本, WPF Core

WebView2 控件中显示的 HTML 页面上手动控制时,可以通过将 oncontextmunu={return false;} 添加为 <body> 标签的属性来禁用上下文菜单。但在大多数情况下,网页是基于用户交互来显示的(例如用户导航到的页面等)。

问题: 如何禁用 WebView2 控件中显示的网页的上下文菜单?

备注:

  1. 我注意到,在某些情况下,当与网页一起加载的 JavaScript 文件时,即使我在已加载页面的 body 标签中以编程方式添加了此属性,oncontextmunu={return false;} 也无法禁用上下文菜单。我看到 Microsoft.Web.WebView2.Core.CoreWebView2Settings 类的 AreDefaultContextMenusEnabled 属性,但是 VS2019 没有识别到任何此类属性适用于 WebView2
  2. 旧的 WPF WebBrowser 控件存在类似问题,如这里这里所述,我在 WebView2 中也遇到了类似情况。
  3. 根据此Microsoft 链接中的第 5 条,该问题已得到解决。但那里的解决方法似乎涉及到 C++,而我正在使用 C#。也许有其他替代方案。

4
在 CoreWebView2 初始化之后,使用以下代码禁用默认上下文菜单:webView21.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false; - Poul Bak
这个回答解决了你的问题吗?如何覆盖右键单击WebView2控件时出现的ContextMenu? - Poul Bak
2
@PoulBak 您提出的使用 webView21.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false; 在 CoreWebView 初始化之后 对于我的特定情况起作用了(谢谢)。不确定它是否适用于其他情况。正如 MS Edge WebView2 团队的成员在这里所解释的那样,他们的团队尚未完全支持自定义上下文菜单。但是有一些解决方法 - 例如您在这里演示的方法。初始化的参考资料请参见此处 - nam
2个回答

15
大多数情况下,禁用上下文菜单的原因是为了防止最终用户检查页面源代码。因此,我们还应该使用以下两个指令来禁用加速键:
webView.CoreWebView2.Settings.AreBrowserAcceleratorKeysEnabled = false;
webView.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false;

由于最终用户可以使用Ctrl + Shift + C和F12进行DevTools 检查加速键(Accelerator Keys)


2
太好了!我忘记了键盘快捷键。你发现得真好! - inejwstine
1
我本来不会发现键盘快捷键的问题,这是一个解决问题的绝佳建议。 - EmbeddedDude

0
我知道这有点晚了,但另一个选项是 -
webView2.CoreWebView2.Settings.AreDevToolsEnabled = false;

请将代码块标记出来。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接