C# CefSharp-无复制快捷菜单项

C# CefSharp-无复制快捷菜单项,c#,vb.net,visual-studio-2010,chromium-embedded,cefsharp,C#,Vb.net,Visual Studio 2010,Chromium Embedded,Cefsharp,我最近将nuget中的cefsharp添加到visual studio中的一个项目中。它的工作与浏览和所有,但我需要我的用户能够复制他的电子邮件地址从浏览器右键点击它点击复制快捷方式 但cefsharp只显示了4个选项-后退、前进、打印、查看源代码。没有复制快捷方式选项 我没有使用任何设置初始化浏览器。刚刚创建了一个chromiumbrowser项并将其添加到表单上的控件中 有人知道为什么会这样吗?我还试图添加一个菜单项,但无法做到这一点,因为我不断得到一个错误-“你必须使用新的关键字”。在浏览

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

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

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

有人知道为什么会这样吗?我还试图添加一个菜单项,但无法做到这一点,因为我不断得到一个错误-“你必须使用新的关键字”。在浏览器中也并没有我可以通过代码调用的复制快捷方式方法


有人能帮我解释一下如何做到这一点吗?如何为右键单击添加更多选项,以及如何右键单击和复制链接地址。或者向我推荐其他浏览器组件?我尝试过awesomium,但有一半的网站没有加载。

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

WinForms

WPF

对于任何一种口味,都可以将
IContextMenuHandler
实现分配给
ChromiumWebBrowser
MenuHandler
属性。在本例中,我遵循GutHub
WinForms
示例,并在名为
MenuHandler
的类中实现了
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

browser.MenuHandler = new MenuHandler();

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

WinForms

WPF

对于任何一种口味,都可以将
IContextMenuHandler
实现分配给
ChromiumWebBrowser
MenuHandler
属性。在本例中,我遵循GutHub
WinForms
示例,并在名为
MenuHandler
的类中实现了
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

browser.MenuHandler = new MenuHandler();

谢谢。工作很有魅力。本应搜索github,但不知道如何浏览其分区。不管怎样,对于其他人,我将sourceurl更改为linkurl,因为这正是我所需要的。parameters.LinkUrl对我有用。啊,我不确定它是
LinkUrl
还是
SourceUrl
,我把它记下来了。很高兴这有帮助。:-)谢谢。工作很有魅力。本应搜索github,但不知道如何浏览其分区。不管怎样,对于其他人,我将sourceurl更改为linkurl,因为这正是我所需要的。parameters.LinkUrl对我有用。啊,我不确定它是
LinkUrl
还是
SourceUrl
,我把它记下来了。很高兴这有帮助。:-)