CefSharp语言设置不生效:如何不重启应用修改浏览器语言并同步JS属性
CefSharp 不重启应用动态修改浏览器语言踩坑记录
CefSharp 69 版本测试结果
需求为不重启应用的前提下修改浏览器窗口使用的语言并重新加载页面,基于CefSharp 69版本先后测试三种方案,结果如下:
- 方案1:关闭所有现有浏览器实例后调用
Cef.Shutdown(),再使用配置了不同Locale参数的配置重新调用Cef.Initialize()。该方案看似是修改Locale参数的唯一合法路径,但Shutdown后重新调用Initialize会触发非托管内存异常,直接导致程序崩溃,方案不可行,推测为CefSharp底层bug。 - 方案2:创建浏览器实例后、导航页面前设置
browser.BrowserSettings.AcceptLanguageList。该操作可正常修改请求头中的Accept-Language值,但完全不会影响页面JS侧的navigator.languages和navigator.language属性,二者仍会返回修改前的旧语言值,为第二个已知bug。 - 方案3:设置
RequestContext后调用SetPreference方法修改intl.accept_languages参数。该操作可正常修改JS侧的navigator.languages和navigator.language属性,但请求中不会携带正确的Accept-Language请求头,为第三个已知bug。
在CefSharp 69版本下,仅能同时叠加使用方案2和方案3实现预期效果,实现逻辑冗余不合理。
CefSharp 91 版本测试结果
升级到最新的CefSharp 91版本后,整体行为逻辑与69版本大体一致,仅存在一处差异:设置intl.accept_languages现在可以同时修改请求头和JS侧语言属性,但设置AcceptLanguageList仍然只会影响请求头,不会修改JS相关属性。
内容的提问来源于stack exchange,提问作者Miral
相关产品推荐
相关产品推荐

