Xilium CefGlue Async Javascript到原生C#的参数和返回值?

时间:2014-08-12 20:08:47

标签: c# javascript asynchronous chromium-embedded cefglue

我最近在C#中尝试过CEFGlue,特别是来自JS> Native集成。

我尝试了3种方法,但似乎都没有。

  1. 通过XHR和Custom SchemeHandler - 通常很棒,但似乎 阻止渲染器和浏览器执行长时间运行的任务。
  2. 通过V8回调 - 很棒但阻止渲染器很长时间 正在运行的任务
  3. 通过cefQuery又名Asynchronous Bindings - 确实如此 不阻止渲染器或浏览器,但似乎没有支持 传递任何参数。
  4. 我似乎有一个微不足道的要求。

    1. 异步执行,即浏览器和渲染器都不是 阻止长时间运行的任务。
    2. 我需要传递参数和 在Javascript中处理返回值。
    3. CEFGlue的功能是否可以让我完成这项任务?

      感谢。

2 个答案:

答案 0 :(得分:4)

我已在Google CEF小组上发布了自己问题的答案。解决方案非常有效。

CEF Google Group

答案 1 :(得分:1)

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

CEF是Chrome构建的,因此所有内容都面向与服务器通信的客户端应用。如果您构建与c#代码通信的Web代码,看起来像这样,那么您可以重用Web开发中的许多最佳实践。

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

我已经为我们开源的工作项目实施了这项工作。 GitHub

它的工作方式非常简单:

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

使用OWIN,您可以在顶层的框架和库上进行分层,从而轻松构建您的应用程序。像Web API这样的东西使得CEF框架中托管的应用程序通过JSON与c#代码异步通信变得微不足道。我们不会在那一刻使用它并使用JavaScript绑定,但使用AJAX进入WebAPI会更好。