是否可以在一个CEF(Chromium Embedded Framework)实例中同时运行多个用户配置文件(具有单独的cookie,历史记录,本地存储等)?目标是在一个窗口中并排允许多个浏览"会话"(它实际上是一个OpenGL应用程序)。
我研究了两种可能的解决方案,每种解决方案都有自己的问题:
使用CefCookieManager
这可以通过创建多个CefCookieManager
来仅为 cookie 执行此操作。但是,似乎没有类似的历史记录和本地存储 API,它们现在仍然是共享的。
使用CefSettings::cache_path
CefSettings settings;
CefString(&settings.cache_path).FromASCII("C:\CefCache");
CefInitialize(args, settings, app, nullptr);
这里的问题是CefSettings
与全局 CEF 实例相关联,而不是与每个浏览器/客户端相关联。
有没有我没有发现的方法?
如果它仅与 cookie 和本地存储有关,并且您使用自定义方案处理程序或请求拦截来托管内容,那么您可以为每个配置文件使用不同的域/子域。请参阅本主题以供参考:http://www.magpcss.org/ceforum/viewtopic.php?f=6&t=11695 。
关于历史记录,您可以使用 OnBeforeBrowse 回调自行实现历史记录。
在上面引用的主题中还提到,从技术上讲,可以为每个 CefRequestContext 指定不同的缓存路径(可以在浏览器创建期间提供)。因此,为 CEF 开发补丁可能是另一种选择。
编辑:CEF 修订版 2040 增加了对每个请求上下文的存储和权限完全隔离的支持,请参阅问题 1044 中的注释 #7:https://code.google.com/p/chromiumembedded/issues/detail?id=1044#c7