ChromiumWebBrowser 禁用右键单击上下文菜单 C#
本文关键字:上下文 菜单 单击 右键 ChromiumWebBrowser | 更新日期: 2023-09-27 18:36:22
如何使用 C# 禁用 Chromium Web 浏览器中的右键单击上下文菜单?
我在Chromium Embedded 3(DCEF3)中找到了这个禁用上下文菜单,但我不熟悉语法(我使用的是C#),而且我在CefSharp.WinForms.ChormiumWebBrowser类上没有看到一个名为OnBeforeContextMenu的事件。
我遇到了同样的问题,但上述解决方案无法再使用,因为接口IMenuHandler
(重命名为 IContextMenuHandler
)进行了一些更改并且不再存在
bool OnBeforeContextMenu(IWebBrowser browser);
现在具有以下签名:
void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model);
问题中链接的 SO 问题(在 Chromium Embedded 3 (DCEF3) 中禁用上下文菜单)与 pascal 和 inno 设置脚本有关,但针对 C# 和 ChromiumWebBrowser
调整的已接受答案对我有用。解决方案是在实现OnBeforeContextMenu
时清除模型参数。IContextMenuHandler
的实现可能如下所示:
public class CustomContextHandler : IContextMenuHandler
{
public void OnBeforeContextMenu(IWebBrowser browserControl, CefSharp.IBrowser browser, IFrame frame, IContextMenuParams parameters,
IMenuModel model)
{
model.Clear();
}
public bool OnContextMenuCommand(IWebBrowser browserControl, CefSharp.IBrowser browser, IFrame frame, IContextMenuParams parameters,
CefMenuCommand commandId, CefEventFlags eventFlags)
{
return false;
}
public void OnContextMenuDismissed(IWebBrowser browserControl, CefSharp.IBrowser browser, IFrame frame)
{
}
}
然后在创建 chromium Web 浏览器对象的代码中:
browser = new ChromiumWebBrowser(url);
browser.MenuHandler = new CustomContextHandler();
我能够弄清楚这一点。我最初问题中引用的文章的问题在于它使用了Chromium Embedded组件。我不使用它。我正在使用cefsharp chromium网络浏览器。为了隐藏右键单击上下文菜单,我在本文中找到了答案:https://github.com/cefsharp/CefSharp/issues/107
您只需定义一个实现 IMenuHandler 接口的类,然后将浏览器控件 MenuHandler 属性设置为此类。最后,在类中返回 OnBeforeContextMenu 方法中的 FALSE。这是类:
public class CustomMenuHandler : IMenuHandler
{
public bool OnBeforeContextMenu(IWebBrowser browser)
{
return false;
}
}
接下来,将 Chromium Web 浏览器的 MenuHandler 属性的实例设置为此类:
var browser = new ChromiumWebBrowser(string.empty);
browser.MenuHandler = new CustomMenuHandler();
为我工作。