這篇文章的前提你的libcef能夠正常啓動,能打開一個基本的網頁,但是不清楚一些接口怎樣在render進程調用和調試的人來說的。
第一步,實現“CefRenderProcessHandler”接口,關鍵代碼:
class ClientApp : public CefApp,
public CefRenderProcessHandler{
public:
ClientApp();
// CefApp methods:
virtual CefRefPtr<CefRenderProcessHandler> GetRenderProcessHandler()
OVERRIDE { return this; }
virtual void OnWebKitInitialized()OVERRIDE;
}
第二步,初始化libcef的時候創建render進程:
CefMainArgs mainArgs;
CefSettings settings;
CefRefPtr<CefApp> app;
settings.multi_threaded_message_loop = true;
settings.log_severity = LOGSEVERITY_DISABLE;
CefString(&settings.locale).FromWString(L"zh-CN");
void* sandbox_info = NULL;
CefRefPtr<ClientApp> CefApp(new ClientApp);
int exit_code = CefExecuteProcess(mainArgs, CefApp, sandbox_info);
bool lbRet = CefInitialize(mainArgs, settings, app, NULL);
第三步,給工程項目添加啓動的命令參數“--renderer-startup-dialog”:
第四步,在“ClientApp::OnWebKitInitialized”實現的接口中下斷點,啓動的調試,程序運行後會彈出對話框,然後根據對話框提示找到進出id,然後附加調試:
到了這裏ClientApp實現的CefRenderProcessHandler接口就可以進行斷點調試了。另外,如果你需要Browser進程和render進程進行通信,則可以通過發送消息的方式,以下是Browser進程發送消息到render進程:
CefRefPtr<CefProcessMessage> msg= CefProcessMessage::Create("my_message");
CefRefPtr<CefListValue> args = msg->GetArgumentList();
args->SetString(0, "my string");
args->SetInt(0, 10);
(CefRefPtr<CefBrowser>)browser_->SendProcessMessage(PID_RENDERER, msg);
然後在render進程就要實現“OnProcessMessageReceived”接口了:
bool ClientApp::OnProcessMessageReceived(CefRefPtr<CefBrowser> browser,
CefProcessId source_process,
CefRefPtr<CefProcessMessage> message)
{
CEF_REQUIRE_RENDERER_THREAD()
const std::string& message_name = message->GetName();
if (message_name == "my_message") {
// Handle the message here...
return true;
}
return false;
}