【发布时间】:2016-06-19 17:15:16
【问题描述】:
如何使用 C# 禁用 Chromium Web 浏览器中的右键单击上下文菜单?
我找到了这个Disable context menu in Chromium Embedded 3 (DCEF3),但我不熟悉语法(我使用的是 C#),而且我在 CefSharp.WinForms.ChormiumWebBrowser 类上没有看到名为 OnBeforeContextMenu 的事件。
【问题讨论】:
如何使用 C# 禁用 Chromium Web 浏览器中的右键单击上下文菜单?
我找到了这个Disable context menu in 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);
问题 (Disable context menu in Chromium Embedded 3 (DCEF3)) 中链接的 SO 问题与 pascal 和 inno 设置脚本有关,但针对 C# 和 ChromiumWebBrowser 调整的接受答案对我有用。解决方法是在OnBeforeContextMenu的实现中清除model参数。 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 铬网络浏览器。隐藏右键上下文菜单我在这篇文章中找到了答案: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();
为我工作。
【讨论】: