为何CefDOMVisitor的Visit方法未被调用?
问题:CefDOMVisitor::Visit未被调用的原因
我想要通过CefDOMVisitor的Visit调用检测document.ready,编写了如下代码,但页面加载后仅能看到DOMVisitor()和~DOMVisitor()的日志,却没有DOMVisitor::Visit的日志,请问该方法未被调用的原因是什么?
class DOMVisitor : public CefDOMVisitor { public: DOMVisitor(){ App::Log(L"DOMVisitor()", __FUNCTION__, __FILE__, __LINE__); }; ~DOMVisitor(){ App::Log(L"~DOMVisitor()", __FUNCTION__, __FILE__, __LINE__); }; virtual void Visit(CefRefPtr<CefDOMDocument> document) override{ App::Log(L"DOMVisitor::Visit", __FUNCTION__, __FILE__, __LINE__); }; IMPLEMENT_REFCOUNTING(DOMVisitor); };
class LoadHandler : public CefLoadHandler { public: virtual void OnLoadEnd(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, int httpStatusCode) override{ CEF_REQUIRE_UI_THREAD(); if (frame && frame->IsMain() && httpStatusCode == 200) { frame->VisitDOM(new DOMVisitor); } }; IMPLEMENT_REFCOUNTING(LoadHandler); };
原因分析
你同时运行了RENDERER进程和BROWSER进程,且LoadHandler在BROWSER进程中实现,但CefFrame::VisitDOM()方法仅能在渲染进程(RENDERER)中调用,对应的DOMVisitor也需要在渲染进程中实现,而非在浏览器进程(BROWSER)中实现和调用。
内容的提问来源于stack exchange,提问作者dcy
相关产品推荐
相关产品推荐

