Cef右键菜单显示DevTools失败

我在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发现都没进来。
请问是我实现的方式缺少调用某些操作了吗?

阅读 9.1k
2 个回答

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

virtual CefRefPtr<CefContextMenuHandler> SimpleHandler::GetContextMenuHandler() 
        OVERRIDE {
    return this;
}

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

推荐问题
宣传栏