一个 CEF 实例中的多个用户配置文件/会话
Multiple user profiles / sessions in one CEF instance
是否可以在一个 CEF(Chromium 嵌入式框架)实例中同时拥有多个用户配置文件(具有单独的 cookie、历史记录、本地存储等)运行?目标是允许多个浏览 "sessions" 在一个 window 中并排浏览(它实际上是一个 OpenGL 应用程序)。
我研究了两种可能的解决方案,每种都有自己的问题:
使用CefCookieManager
这可以通过 creating multiple CefCookieManager
s 只对 cookie 进行。但是,历史和本地存储似乎没有类似的API,现在仍然共享。
使用CefSettings::cache_path
CefSettings settings;
CefString(&settings.cache_path).FromASCII("C:\CefCache");
CefInitialize(args, settings, app, nullptr);
这里的问题是 CefSettings
与全局 CEF 实例相关联,而不是每个 browser/client。
有没有我没发现的方法?
如果它只是关于 cookie 和本地存储,并且您使用自定义方案处理程序或请求拦截来托管内容,那么您可以为每个配置文件使用不同的 domains/subdomains。请参阅此主题以供参考: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
是否可以在一个 CEF(Chromium 嵌入式框架)实例中同时拥有多个用户配置文件(具有单独的 cookie、历史记录、本地存储等)运行?目标是允许多个浏览 "sessions" 在一个 window 中并排浏览(它实际上是一个 OpenGL 应用程序)。
我研究了两种可能的解决方案,每种都有自己的问题:
使用CefCookieManager
这可以通过 creating multiple CefCookieManager
s 只对 cookie 进行。但是,历史和本地存储似乎没有类似的API,现在仍然共享。
使用CefSettings::cache_path
CefSettings settings;
CefString(&settings.cache_path).FromASCII("C:\CefCache");
CefInitialize(args, settings, app, nullptr);
这里的问题是 CefSettings
与全局 CEF 实例相关联,而不是每个 browser/client。
有没有我没发现的方法?
如果它只是关于 cookie 和本地存储,并且您使用自定义方案处理程序或请求拦截来托管内容,那么您可以为每个配置文件使用不同的 domains/subdomains。请参阅此主题以供参考: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