【问题标题】:ChromiumWebBrowser Disable Right-Click Context Menu C#ChromiumWebBrowser 禁用右键单击上下文菜单 C#
【发布时间】:2016-06-19 17:15:16
【问题描述】:

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

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

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    我也遇到了同样的问题,但是由于接口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();
    

    【讨论】:

    • 不错!乐于助人:)
    【解决方案2】:

    好的,我能够弄清楚这一点。我最初的问题中引用的文章的问题是它使用了 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();
    

    为我工作。

    【讨论】:

    • 现在这是一个过时的答案。不适用于版本 49。
    • 我必须实现 RunContextMenu,只是返回 false。我在 V67 中工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    相关资源
    最近更新 更多