3

我最近一直在 C# 中试验 CEFGlue,特别是从 JS>Native 集成。

我尝试了 3 种方法,但似乎都不合适。

  1. 通过 XHR 和自定义 SchemeHandler - 通常很好,但似乎会阻止渲染器和浏览器以执行长时间运行的任务。
  2. 通过 V8 回调 - 很棒,但会阻止渲染器执行长时间运行的任务
  3. 通过 cefQuery aka Asynchronous Bindings - 不会阻塞渲染器或浏览器,但似乎不支持传递任何参数。

我似乎有一个微不足道的要求。

  1. 异步执行,即浏览器和渲染器都不会阻塞长时间运行的任务。
  2. 我需要在 Javascript 中传递参数和处理返回值。

CEFGlue 是否有一个我可以试验的功能可以让我完成这项任务?

谢谢。

4

2 回答 2

4

我已经在 Google CEF 组上发布了我自己的问题的答案。该解决方案效果很好。

CEF 谷歌集团

于 2014-10-18T14:51:07.697 回答
1

一个解决方案是重用 Chromium Embedded 中内置的 AJAX 管道。

CEF 是从 Chrome 构建的,因此一切都面向与服务器通信的客户端应用程序。如果您将与 c# 代码通信的 Web 代码构造成如下所示,那么您可以重用 Web 开发中的许多最佳实践。

可以实现一个进程内 Web 服务器并使用它来处理页面请求和 AJAX 请求,这可以促进与您的 c# 代码的通信。

我已经为我们开源的一个工作项目实现了这一点。GitHub

它的工作方式非常简单:

  • 创建一个在内存中运行的 HTTP 服务器。我们为此使用 OWIN。
  • 创建一个 IRequestHandler 的实现,它拦截对您已知域的任何请求并从内部 Web 服务器提供服务。在这里查看我们的

使用 OWIN 允许您在许多框架和库上进行分层,从而轻松构建您的应用程序。Web API 之类的东西使托管在 CEF 框架中的应用程序通过 JSON 与您的 c# 代码进行异步通信变得微不足道。我们现在不使用它并使用 JavaScript 绑定,但使用 AJAX 去 WebAPI 更好。

于 2014-08-29T12:56:12.750 回答