gpt4 book ai didi

c++ - CEF 3 离屏渲染和页面源码

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:52 34 4
gpt4 key购买 nike

今天我正在使用 Chromium Embedded Framework 3。

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

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

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

App 实现了 CefApp、CefBrowserProcessHandler 和 CefRenderProcessHandler

处理程序实现 CefClient、CefDisplayHandler、CefLifeSpanHandler、CefLoadHandler 和 CefRenderHandler

访问者实现 CefStringVisitor

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

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

同时

window_info.SetAsWindowless(NULL, true);

现在 App::OnContextCreated() 只有在我以单模式运行 CEF3 时才会调用

main_settings.single_process = true;

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

browser->GetMainFrame()->GetSource(new Visitor());

获取页面源并且它有效,但是该方法被多次调用并且此时似乎不执行JavaScript。

我现在的问题是,在呈现所有内容并执行 JavaScript 之后,阅读页面源代码的最佳点是什么?

在调用 Handler::GetViewRect() 时也永远不会调用 Handler::OnPaint()。

问候

挪威

最佳答案

OnContextCreated 在 Renderer 进程中运行,这可能就是它仅在单进程模式下工作的原因。您应该在 Browser 进程中运行的 CefLoadHandler::OnLoadEnd 或 OnLoadingStateChange 中调用 GetSource。

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

关于c++ - CEF 3 离屏渲染和页面源码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24972921/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com