Jus*_*ter 11 c++ chromium-embedded
在PC游戏中我有浏览器用于新闻,虚拟货币商店和社交网络.它是基于Chromium Embedded Framework的全新更新而构建的.问题是当我打开一个浏览器窗口(网站工作正常)然后关闭,对于某些网站CEF子流程没有完成.如果是Youtube视频,我也可以继续听音频.我使用屏幕外渲染,不创建其他本机窗口,只创建子进程.要关闭浏览器窗口,我删除对CefBrowser的所有引用并调用:
m_browser->GetHost()->CloseBrowser(true);
Run Code Online (Sandbox Code Playgroud)
我还尝试了其他方法来关闭/销毁/最终化渲染子流程,例如在关闭之前加载'about:blank',但这没有任何帮助:进程保持清醒,音频继续播放.重要提示:它只发生在某些网站上,我想这些网站会使用某些功能,而其他网站则不会.当我尝试在CEF设置中禁用JavaScript时,错误消失了,但我需要JS.
谢谢!
CEF运行时配置:多进程,单线程消息循环,具有子进程路径,无窗口呈现,无沙箱.
PC配置:OS Windows 8,VS 2010,Chromium Embedded Framework版本3.3071,构建1649,C++语言.
您应该检查 onbeforeunload 的实现。\n
\n CEF GeneralUsage写了有关 CefBrowserHost::CloseBrowser 的内容:\n然后父窗口需要调用 CloseBrowser(false) 并等待第二个操作系统关闭事件以指示浏览器已允许关闭。如果通过 JavaScript \xe2\x80\x98onbeforeunload\xe2\x80\x99 事件处理程序或 DoClose() 回调取消关闭,则不会发送第二个操作系统关闭事件。
\n\n如果您仍然想终止子进程,我建议您使用浏览器 IPC 消息并在应用程序中退出。\n在您的游戏运行时
\n\nCefRefPtr<CefProcessMessage> msg = CefProcessMessage::Create(KILL_subprocess);\nm_browser->SendProcessMessage(PID_RENDERER, msg);\nRun Code Online (Sandbox Code Playgroud)\n\n并在子进程中实现 \xe2\x80\x9cOnProcessMessageReceived\xe2\x80\x9d:
\n\nif (msg->GetName() == KILL_subprocess)\n{\n delete this;\n std::exit(EXIT_FAILURE);\n}\nRun Code Online (Sandbox Code Playgroud)\n