4

我已经在我的 WinForms 中嵌入了 CefSharp。现在我正在尝试找到一种机制,以某种方式让用户使用开发工具的元素选择器(不显示内置开发工具窗口)并在用户单击元素时,我想在我的 .NET 代码中获取 HTML。

我可以这样做吗?有什么帮助吗?

谢谢,

4

2 回答 2

3

希望我能正确理解您的要求;“您想让用户看到当前悬停元素的突出显示,然后通过鼠标单击来选择它”?然后我会采取另一条路线,而不是挂钩到 Dev Tools 检查器功能。

  1. 我认为使用您自己的 JavaScript 片段复制它更容易,就像在另一个问题中一样:在鼠标悬停时突出显示 DOM 元素,就像 inspect 一样。甚至还有一个 JSFiddle 演示,其中一种建议的编码方式。

  2. 然后,您“仅”需要检测用户单击的元素并将其发送到 .NET 端。

  3. 有关在 .NET 和 JS(或相反)之间调用的帮助,请参阅CefSharp FAQ

如果您出于某种原因想要采取的路线确实是使用 DevTools Inspector,我将开始查看:

于 2014-02-16T18:09:46.470 回答
1

这个老问题作为谷歌的最高结果出现了,找到一个好的解决方案并不容易,所以希望这可以帮助其他不得不搞乱cefsharp的人。您可以通过实现 IContextMenuHandler 添加“检查”上下文菜单选项。

public class DevToolsMenuHandler : IContextMenuHandler
{
    public void OnBeforeContextMenu(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters,
        IMenuModel model)
    {
        model.AddItem(CefMenuCommand.CustomFirst, "Inspect");
    }

    public bool OnContextMenuCommand(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters,
        CefMenuCommand commandId, CefEventFlags eventFlags)
    {
        if (commandId != CefMenuCommand.CustomFirst) return false;

        browser.ShowDevTools(null, parameters.XCoord, parameters.YCoord);
        return true;
    }

    public void OnContextMenuDismissed(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame)
    {
    }

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

然后将您的自定义菜单处理程序分配给您的 CEF 浏览器实例,如下所示:

CefBrowser.MenuHandler = new DevToolsMenuHandler();
于 2021-11-04T20:09:50.447 回答