Cef右键菜单显示DevTools失败

发布于 2022-09-06 14:58:04 字数 1891 浏览 49 评论 0

我在cef 3.3239提供的CefSimple中想加一个Show DevTools的右键菜单选项,但是调试发现一直没进来OnBeforeContextMenu这个函数。代码如下:

// 1. SimpleHandler添加CefContextMenuHandler继承
class SimpleHandler : public ...
                      public public CefContextMenuHandler { /**/ }


// 2. 重写CefContextMenuHandler和OnContextMenuCommand事件回调

// Cef源码注释:"Called before a context menu is displayed..."
void SimpleHandler::OnBeforeContextMenu(CefRefPtr<CefBrowser> browser, 
        CefRefPtr<CefFrame> frame,
        CefRefPtr<CefContextMenuParams> params,
        CefRefPtr<CefMenuModel> model) {
    CEF_REQUIRE_UI_THREAD();
    if ((params->GetTypeFlags() & (CM_TYPEFLAG_PAGE | CM_TYPEFLAG_FRAME)) != 0) {
        if (model->GetCount() > 0)
            model->AddSeparator();

        model->AddItem(DEV_TOOLS_ID, "&Show DevTools");    // 添加一个右键菜单项
    }
}

// Cef源码注释:Called to execute a command selected from the context menu
bool SimpleHandler::OnContextMenuCommand(CefRefPtr<CefBrowser> browser,
        CefRefPtr<CefFrame> frame,
        CefRefPtr<CefContextMenuParams> params,
        int command_id,
        EventFlags event_flags) {
    CEF_REQUIRE_UI_THREAD();
    switch (command_id)
    {
    case DEV_TOOLS_ID:
        ShowDevTools(browser);    // 显示DevTools
        break;
    default:
        break;
    }
    
    return true;
}

void SimpleHandler::ShowDevTools(CefRefPtr<CefBrowser> browser)
{
    CefWindowInfo win_info;
    CefRefPtr<CefClient> client;
    CefBrowserSettings settings;

    browser->GetHost()->ShowDevTools(win_info, client, settings, CefPoint());
}

但是我运行程序之后,发现右键菜单没有添加上我要的DevToos,断点设置在OnBeforeContextMenuOnContextMenuCommand发现都没进来。
请问是我实现的方式缺少调用某些操作了吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ㄟ。诗瑗 2022-09-13 14:58:05

找到原因了,还需要重写GetContextMenuHandler接口。

virtual CefRefPtr<CefContextMenuHandler> SimpleHandler::GetContextMenuHandler() 
        OVERRIDE {
    return this;
}
执笏见 2022-09-13 14:58:05

兄弟,我重写GetContextMenuHandler接口还是不行是什么原因啊,我用的是最新版本。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文