You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 08:49:59