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
相关产品推荐
相关产品推荐

