如何使用C#禁用Chromium Web浏览器中的右键单击上下文菜单?
我发现了Disable context menu in Chromium Embedded 3 (DCEF3),但我不熟悉语法(我使用C#),而且我没有在CefSharp.WinForms.ChormiumWebBrowser类上看到一个事件叫OnBeforeContextMenu。
答案 0 :(得分:13)
我遇到了同样的问题,但上述解决方案无法再使用,因为界面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
实现中的模型参数。 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)
{
}
}
然后在创建chrome web浏览器对象的代码中:
browser = new ChromiumWebBrowser(url);
browser.MenuHandler = new CustomContextHandler();
答案 1 :(得分:4)
好的,我能够弄清楚这一点。我原始问题中引用的文章的问题是它使用了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();
为我工作。