c# - CefSharp - 没有复制快捷菜单项

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

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

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

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

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

有人可以帮我解释一下如何实现吗?如何为右键单击添加更多选项以及如何右键单击并复制链接地址。或者向我推荐一些其他的浏览器组件?我已经尝试过 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 的类中实现了 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;
    }
}

那么就是给ChromiumWebBrowserMenuHandler属性赋一个实例了

browser.MenuHandler = new MenuHandler();

关于c# - CefSharp - 没有复制快捷菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43019229/

相关文章:

c# - 使用 Math.Round 转换特定对象类型的所有属性值?

javascript - 从客户端验证 C# 中具有数十个属性的对象更改的任何属性

c# - Visual Studio 中调试和发布版本的不同构建操作

c# - 重写表单事件方法的基本调用的必要性

C#实现垂直自动隐藏工具栏的方法

c# - 应用程序引发了未处理的异常。系统无效操作异常: Unable to > resolve service for type

c# - 为什么我不能从动态对象访问 Internal/Friend 属性?

vb.net - 如何将函数传递给函数? VB 2010 中是否提供仿函数/函数对象?

asp.net - Log4Net、ThreadContext 和 Global.asax

c++ - 为 arm 设置 visual studio express