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

本文关键字:上下文 菜单 单击 右键 ChromiumWebBrowser | 更新日期: 2023-09-27 18:36:22

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

我在Chromium Embedded 3(DCEF3)中找到了这个禁用上下文菜单,但我不熟悉语法(我使用的是C#),而且我在CefSharp.WinForms.ChormiumWebBrowser类上没有看到一个名为OnBeforeContextMenu的事件。

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

我遇到了同样的问题,但上述解决方案无法再使用,因为接口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();

为我工作。