我为方案backend://
注册了一个自定义方案处理程序。正如在scheme_handler example中所做的那样
我call in every process(Rendere流程和浏览器流程)
AddCustomScheme
:
void registerCustomSchemes(CefRawPtr<CefSchemeRegistrar> registrar)
{
for(auto& scheme : getCustomSchemes()) // "backend" and "client"
{
registrar->AddCustomScheme(scheme,
true /* is standart*/,
false /* is local */,
false /* is display_isolated */,
true /* is secure */,
true /* is cors enabled*/,
false /* is_csp_bypassing*/);
}
}
client://
方案还安装了一个处理程序。
当我不同时使用AddCustomScheme
和client
致电backend
时。 backend://
处理程序工作(以及client
处理程序),但我没有收到任何发布请求数据(我发送一些二进制数据)。
当我为AddCustomScheme
和client
使用backend
方案处理程序时
不再触发。
我应该如何设置自定义处理程序backend
以便它接收发布数据请求?我也尝试在AddCustomHandler
中使用bool来解决这个问题。
答案 0 :(得分:2)
您正在尝试跨越XmlHttpRequest
(XHR)。您需要配置跨源资源共享(CORS)。看看CefAddCrossOriginWhitelistEntry
。
WebKit
不会将POST
数据传递给在非HTTP方案上执行的同步XHR请求。请参阅AreMethodAndURLValidForSend()
中的XMLHttpRequest::send() in third_party/WebKit/Source/core/XMLHttpRequest.cpp
项检查。
bool XMLHttpRequest::AreMethodAndURLValidForSend() {
return method_ != HTTPNames::GET && method_ != HTTPNames::HEAD &&
url_.ProtocolIsInHTTPFamily();
}
如果您需要使用XHR POST
请求,则应使用HTTP
或HTTPS
协议注册自定义处理程序。由于这是有意的WebKit
设计功能,因此CEF3
可能无法更改。