CefSharp - 没有复制快捷菜单项

CefSharp - no copy shortcut menu item

我最近将来自 nuget 的 cefsharp 添加到 visual studio 中的一个项目中。它与浏览器一起工作,但我需要我的用户能够通过右键单击它单击复制快捷方式从浏览器复制他的电子邮件地址。

但 cefsharp 只显示 4 个选项 - 后退、前进、打印、查看源代码。没有复制快捷方式选项。

我还没有用任何设置初始化浏览器。刚刚创建了一个 chromiumbrowser 项并将其添加到表单的控件中。

有人知道为什么会这样吗?我还尝试添加一个菜单项,但无法添加,因为我一直收到错误消息 - "you must use new keyword"。也没有在浏览器中可以通过代码调用的复制快捷方式。

有人可以帮我解释一下如何实现吗?如何为右键单击添加更多选项以及如何右键单击并复制 link 地址。或者向我推荐一些其他的浏览器组件?我试过 awesomium,但一半的网站无法加载。

您可以通过实施 IContextMenuHandler 创建自己的上下文菜单。您没有指定您使用的是 WinForms 还是 WPF 版本,但在 GitHub 上有大量示例。

WinForms https://github.com/cefsharp/CefSharp/blob/master/CefSharp.WinForms.Example/Handlers/MenuHandler.cs

WPF https://github.com/cefsharp/CefSharp/blob/master/CefSharp.Wpf.Example/Handlers/MenuHandler.cs

对于任何一种风格,您都将 IContextMenuHandler 实现分配给 ChromiumWebBrowserMenuHandler 属性。在本例中,我遵循 GutHub WinForms 示例并在名为 MenuHandler 的 class 中实现了 IContextMenuHandler。下面是 WinForms 的示例,但它可以很容易地转换为 WPF.

internal class MenuHandler : IContextMenuHandler
{
    private const int Copy = 26503;

    void IContextMenuHandler.OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)
    {
        //Add new custom menu items
        model.AddItem((CefMenuCommand)Copy, "Copy Link Address");
    }

    bool IContextMenuHandler.OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
    {
        if ((int)commandId == Copy)
        {
            //using System.Windows.Forms;
            Clipboard.SetText(parameters.SourceUrl);
        }
        return false;
    }

    void IContextMenuHandler.OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame)
    {

    }

    bool IContextMenuHandler.RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback)
    {
        return false;
    }
}

那么就是给ChromiumWebBrowser

MenuHandler属性分配一个实例
browser.MenuHandler = new MenuHandler();