首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用电子而不是CEF获取使用非HTTP的API

使用电子而不是CEF获取使用非HTTP的API
EN

Stack Overflow用户
提问于 2019-07-25 12:44:59
回答 1查看 1.3K关注 0票数 1

我正在用HTML5前端和C++后端编写一个应用程序。我想使用自定义方案("klaes://")在前端和后端之间进行通信。我已经尝试过结合使用ElectronJS和navtive c++加载项来解决这些需求,工作得很好,非常好。

现在,我正在尝试使用(CEF)来解决相同的需求。除了我无法在我的自定义方案上使用Fetch-API之外,一切都很好。

电子I中的做了以下工作:

注册自订计划

代码语言:javascript
复制
protocol.registerSchemesAsPrivileged ([{
    scheme: "klaes",
    privileges: {
        supportFetchAPI: true,
        "corsEnabled": true
    }
}])

处理请求:

代码语言:javascript
复制
protocol.registerBufferProtocol ("klaes", (request, callback) => {
   // ...
}

这里一切都很好。

在CEF中我尝试了以下几个方面:

注册自订计划:

代码语言:javascript
复制
class ClientSchemeHandler : public CefResourceHandler { 

  // handle request
  bool ProcessRequest(CefRefPtr<CefRequest> request,
    CefRefPtr<CefCallback> callback) OVERRIDE {
    // ...  
 }

 // add CORS header
 void GetResponseHeaders(CefRefPtr<CefResponse> response,
            int64& response_length,
            CefString& redirectUrl) OVERRIDE {
   // ...
   response->GetHeaderMap(hdrMap);
   hdrMap.insert(std::make_pair ("Access-Control-Allow-Origin", "*"));
   response->SetHeaderMap(hdrMap);
   // ...
 }

};

class ClientSchemeHandlerFactory : public CefSchemeHandlerFactory {
  // ...
};

在我的应用程序中,我做到了:

代码语言:javascript
复制
void SimpleApp::OnContextInitialized() {

  // ...

  CefRegisterSchemeHandlerFactory("klaes", "openmodule", new ClientSchemeHandlerFactory ());


  // ...

  // Browsersettings
  CefBrowserSettings browser_settings;
  browser_settings.web_security = STATE_DISABLED;


}

设置给定方案的fetch_enabled -标志

代码语言:javascript
复制
void SimpleApp::OnRegisterCustomSchemes(CefRawPtr<CefSchemeRegistrar> registrar) {
  registrar->AddCustomScheme("klaes",  CEF_SCHEME_OPTION_FETCH_ENABLED);
}

没有fetch-API的请求(如imgs、script、href等)效果很好。但是当我尝试获取请求时,我得到了以下前端错误:Fetch API cannot load klaes://openmodule/5. URL scheme must be "http" or "https" for CORS request.", source: klaes://openmodule/www/build/p-elph9ath.entry.js (1)

当我取消对ElectronJS的"corsEnabled": true选项进行注释时,registerSchemesAsPrivileged中也会出现相同的错误

我是否有任何错误,或者这根本不可能与CEF,但可能与电子?

顺便说一下,我使用了07/25/2019-CEF75.1.8+g84Fed5d+Cr-75.0.3770.100/Chromium75.0.3770.100 build for Windows。

EN

回答 1

Stack Overflow用户

发布于 2019-07-25 17:10:55

下面的代码应该可以解决问题:

代码语言:javascript
复制
void SimpleApp::OnRegisterCustomSchemes(CefRawPtr<CefSchemeRegistrar> registrar) {
  registrar->AddCustomScheme("klaes",  CEF_SCHEME_OPTION_FETCH_ENABLED|CEF_SCHEME_OPTION_CORS_ENABLED);
}

此外,您还可以使用enum cef_scheme_options_t 这里中可用的选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57202299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档