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

CEF3如何设置UR_FLAG_ALLOW_STORED_CREDENTIALS标志及解决只读报错问题

错误原因

你收到这个报错是因为一旦将CefRequest对象传入CefURLRequest::Create()方法,该请求对象就会被标记为只读状态,后续所有修改请求属性的操作都会触发只读校验失败。你当前的代码顺序是先创建CefURLRequest,再修改Request的Flags,刚好踩了这个限制。

正确修改方案

调整操作顺序,所有对CefRequest的属性设置(包括Flags、URL、请求方法、Header、Post数据等),都要放在调用CefURLRequest::Create()之前完成。

void WebApp::OnContextInitialized() {
    // 省略其他逻辑
    CefBrowserHost::CreateBrowser(window_info, handler, url, browser_settings, nullptr, nullptr);
    // 省略其他逻辑
    CefRefPtr<CefRequest> request = CefRequest::Create();
    // 所有请求属性修改都放在创建URLRequest之前
    request->SetFlags(UR_FLAG_ALLOW_STORED_CREDENTIALS);  
    CefRefPtr<MyRequestClient> client = new MyRequestClient();
    CefRefPtr<CefURLRequest> url_request = CefURLRequest::Create(request, client.get(), nullptr);
    // 后续不需要再修改request属性
    url_request->Cancel(); 
}

额外注意事项

  • 如果你是给页面内的普通资源请求加这个标志,不需要自己创建CefURLRequest,可以在CefResourceRequestHandler的OnBeforeResourceLoad回调里修改传入的request参数的Flags即可,此时请求还未发送,属性可修改。
  • 如果是需要全局开启允许存储凭证的逻辑,可以在CefBrowserSettings里设置persist_user_preferences为true,同时保证请求的跨域配置符合CORS规则。

内容的提问来源于stack exchange,提问作者Rinat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:45:04