ChromiumWebBrowser禁用右键单击上下文菜单C#

时间:2015-01-06 16:11:57

标签: c# winforms

如何使用C#禁用Chromium Web浏览器中的右键单击上下文菜单?

我发现了Disable context menu in Chromium Embedded 3 (DCEF3),但我不熟悉语法(我使用C#),而且我没有在CefSharp.WinForms.ChormiumWebBrowser类上看到一个事件叫OnBeforeContextMenu。

2 个答案:

答案 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();

为我工作。