Cef中的OnContextCreated()未被调用

时间:2015-11-06 18:28:34

标签: javascript event-handling chromium-embedded

我对this post中的人有类似的问题;我试图扩展chrome嵌入式框架二进制文件中包含的cefsimple.exe应用程序以包含V8处理程序。我实施了OnContextCreated()方法,并确保在RenderProcessHandler类中扩展SimpleHandler。我试图实现一个名为test_string的简单窗口绑定变量;这是我的代码的样子;

void SimpleHandler::OnContextCreated(
    CefRefPtr<CefBrowser> browser,
    CefRefPtr<CefFrame> frame,
    CefRefPtr<CefV8Context> context)
{
    CefRefPtr<CefV8Value> object = context->GetGlobal();

    object->SetValue("test_string", CefV8Value::CreateString("this is a test"), V8_PROPERTY_ATTRIBUTE_NONE);
}

但程序永远不会到达我在方法中添加的任何断点,并且我在应用程序中加载的任何网页上都未定义变量。我看到另一个线程中的一个解决方案是启用settings.single_process标志,我已经完成了,但我的代码仍然没有到达断点。

要明确的是,我正在使用window.test_string访问页面上的变量。

2 个答案:

答案 0 :(得分:0)

您是否阅读了General Usage指南?

下面的一些要点

https://bitbucket.org/chromiumembedded/cef/wiki/GeneralUsage#markdown-header-cefapp https://bitbucket.org/chromiumembedded/cef/wiki/GeneralUsage#markdown-header-processes

不支持single_process模式,因此我从未使用过它。一般来说,我会避免它。多进程体系结构意味着您需要将调试器附加到进程。在这种情况下,Chromium指南与CEF相关。

https://www.chromium.org/developers/how-tos/debugging-on-windows#TOC-Attaching-to-the-renderer

答案 1 :(得分:0)

您需要确保您的应用来自CefRenderProcessHandler 不是SimpleHandler !!!

class SimpleApp : public CefApp
    , public CefRenderProcessHandler 
{

virtual void OnContextCreated(CefRefPtr<CefBrowser> browser,
    CefRefPtr<CefFrame> frame,
    CefRefPtr<CefV8Context> context) OVERRIDE;

valdemar-rudolfovich说,您需要在其中传递SimpleApp的实例 CefExecuteProcess