Этот код создает посетителя DOM в процессе браузера, но функции посетителя DOM вызываются в процессе рендеринга, как вы можете видеть в комментариях к коду CEF3
Это будет работать, если вы используете режим " single process ", но этот режим не поддерживается CEF3, он вызывает ошибки, и вы должны использовать этот режим только для целей отладки.
Вам нужно использовать несколько процессов. Используйте демоверсию DOMVisitor в качестве шаблона для своего приложения и прочитайте все комментарии кода в этой демоверсии.
Посетитель DOM должен быть создан в процессе рендеринга. Для этого вы отправляете сообщение процесса из процесса браузера процессу рендеринга, а затем создаете подкласс TCefDomVisitorOwn внутри события, которое получает сообщение процесса.
Демонстрация DOMVisitor использует событие GlobalCEFApp.OnProcessMessageReceived для получения сообщений в процессе рендеринга и создает TCefFastDomVisitor2 внутри этого события.
В конструкторе TCefFastDomVisitor2 есть параметр процедуры с именем «proc», который выполняется при запуске события TCefDomVisitorOwn.visit.
Внутри этих процедур вы можете искать узлы в DOM, а затем отправлять результаты обратно в процесс браузера, вызывающий browser.SendProcessMessage (PID_BROWSER, msg)
Браузер будет получать эти сообщения в событии TChromium.OnProcessMessageReceived.
Как вы знаете, Delphi может отлаживать только один процесс. Если вам нужно отладить код, выполненный в процессе рендеринга, вам необходимо:
- Используйте режим «одного процесса», но помните, что вы не должны использовать этот режим в финальной версии.
- Используйте параметр «Запуск без отладки ...» в Delphi и выберите процесс рендеринга.