ChromiumWebBrowser禁用C#右键菜单

4
如何使用C#禁用Chromium Web浏览器中的右键上下文菜单?
我找到了这个链接 Disable context menu in Chromium Embedded 3 (DCEF3),但是我不熟悉语法(我正在使用C#),而且我没有看到CefSharp.WinForms.ChormiumWebBrowser类中的OnBeforeContextMenu事件。
2个回答

16

我遇到了相同的问题,但上述解决方案已经无法使用,因为接口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 Setup脚本有关,但接受的答案已经适用于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网络浏览器对象的代码中:

browser = new ChromiumWebBrowser(url);
browser.MenuHandler = new CustomContextHandler();

不错!很高兴能帮忙 :) - margaretkru

4

好的,我已经解决了这个问题。我原来提出问题时参考的文章有一个问题,就是它使用了Chromium Embedded组件。而我并没有使用那个组件,我使用的是cefsharp Chromium Web浏览器。为了隐藏右键菜单,我在这篇文章中找到了答案: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();

对我有用。


3
这个答案现在已经过时了,在版本49中无法使用。 - Kylo Ren
1
我不得不实现RunContextMenu,只需简单地返回false。在V67中对我来说工作得很好。 - GeoffM

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