cef3屏幕外渲染和页面源

CEF 3 offscreen rendering and page source

本文关键字:屏幕 cef3      更新时间:2023-10-16

今天我正在使用Chromium嵌入式框架3。

我已经设置、编译和执行了所有内容。一切正常

现在我想在所有内容呈现并执行JavaScript之后读取页面源代码。我还想从屏幕外渲染中获得缓冲区。

我的基本应用程序结构是:

App实现CefApp, CefBrowserProcessHandler和CefRenderProcessHandler

Handler实现了CefClient, CefDisplayHandler, CefLifeSpanHandler, CefLoadHandler和CefRenderHandler

Visitor实现CefStringVisitor

在App::OnContextInitialized()我正在执行

CreateBrowser(window_info, handler.get(), "http://www.google.com/",browser_settings, NULL);

,

window_info。SetAsWindowless (NULL,真的);

现在是App::OnContextCreated()只调用如果我运行CEF3在单模

main_settings。

否则它永远不会被调用。在App::OnContextCreated()我做

浏览器-> GetMainFrame()——> GetSource(新访客());

来获取页面源代码,它可以工作,但是该方法被调用了多次,并且此时似乎没有执行JavaScript。

我的问题是现在什么是阅读页面源代码的最佳点后,一切都呈现和JavaScript执行?

当Handler::GetViewRect()被调用时,Handler::OnPaint()永远不会被调用。

Norwido

OnContextCreated在Renderer进程中运行,这可能就是为什么它只能在单进程模式下工作。你应该调用浏览器进程中运行的CefLoadHandler::OnLoadEnd或OnLoadingStateChange中的GetSource。

没有在CefRenderHandler中实现所有必要的回调可能是OnPaint回调没有被调用的原因。阅读头文件中的文档注释