CefSharp - 无复制快捷菜单项

1 c# vb.net visual-studio-2010 chromium-embedded cefsharp

我最近将 nuget 中的 cefsharp 添加到 Visual Studio 中的一个项目中。它可以用于浏览和所有操作,但我需要我的用户能够通过右键单击它并单击复制快捷方式从浏览器复制他的电子邮件地址。

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

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

任何人都知道为什么会发生这种情况?我还尝试添加一个菜单项,但无法做到这一点,因为我不断收到错误 - “您必须使用新关键字”。此外,浏览器中没有我可以通过代码调用的复制快捷方式方法。

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

TEK*_*TEK 6

您可以通过实现来创建自己的上下文菜单IContextMenuHandler。您没有指定是否使用WinFormsWPF版本,但 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实现分配给MenuHandler的属性ChromiumWebBrowser。在本例中,我遵循 GutHubWinForms示例并IContextMenuHandler在名为 的类中实现MenuHandler。下面是一个示例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;
    }
}
Run Code Online (Sandbox Code Playgroud)

那么这只是将一个实例分配给MenuHandler属性的情况ChromiumWebBrowser

browser.MenuHandler = new MenuHandler();
Run Code Online (Sandbox Code Playgroud)