CEF 3 внеэкранный рендеринг и источник страницы

сегодня я работаю с Chromium Embedded Framework 3.

У меня все настроено, скомпилировано и выполнено. Все отлично работает

Теперь я хочу прочитать исходный код страницы после того, как все отрендерено и JavaScript выполнен.
Также хотелось бы получить буфер от закадрового рендеринга.

Моя основная структура приложения:

Приложение реализует CefApp, CefBrowserProcessHandler и CefRenderProcessHandler

Обработчик реализует CefClient, CefDisplayHandler, CefLifeSpanHandler, CefLoadHandler и CefRenderHandler

Посетитель реализует CefStringVisitor

В приложении :: 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;

в противном случае это никогда не называется. В приложении :: OnContextCreated () я делаю

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

чтобы получить исходный код страницы, и он работает, но метод вызывается несколько раз и, кажется, не выполняет JavaScript на данном этапе.

Теперь мой вопрос: что лучше всего читать на странице источника ПОСЛЕ того, как все отображается и выполняется JavaScript?

Также Handler :: OnPaint () никогда не вызывается, в то время как Handler :: GetViewRect ().

С уважением

Norwido

2

Решение

OnContextCreated работает в процессе Renderer, поэтому, вероятно, он работает только в режиме одного процесса. Вы должны вызвать GetSource в CefLoadHandler :: OnLoadEnd или OnLoadingStateChange, которые выполняются в процессе браузера.

Нереализация всех необходимых обратных вызовов в CefRenderHandler может быть причиной того, что обратный вызов OnPaint не вызывается. Прочитайте комментарии к документу в заголовочных файлах.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector