【问题标题】:How can I use Google Chrome's V8 JavaScript interpreter from Delphi?如何使用 Delphi 的 Google Chrome 的 V8 JavaScript 解释器?
【发布时间】:2010-02-24 03:59:07
【问题描述】:

我想在我的 Delphi 应用程序中嵌入 Google Chrome 附带的 V8 JavaScript 解释器。我知道来自 Google 的 chromium embedded 开源项目,但我想知道是否有人知道任何 Pascal/Delphi 包装器?

在我链接的站点上的 zip 文件中包含一个示例项目,它是用 C++ 编写的。如果不出意外,我会慢慢地、痛苦地转换它。

更新
我只想嵌入 V8 JavaScript 解释器,而不是 Chromium 浏览器。

【问题讨论】:

  • 你想嵌入 Chronium 浏览器还是只嵌入 V8 javascript 引擎?
  • 我只想嵌入 V8 JavaScript 引擎...而不是浏览器。
  • 一年后:你得到这个工作了吗?

标签: javascript delphi


【解决方案1】:

最理想的解决方案是创建一个包装器,最好使用未经修改的原始源,然后将该包装器编译为 OBJ 文件(使用 C++),然后将其链接到 Delphi,其中另一个“包装器”通过以下方式公开引擎更标准的对象帕斯卡语法。然后,这种方法将允许在引擎中进行更改,而无需在每次添加新功能或附加性能时都进行完全转换。这种方法的唯一缺点是在导航层时会损失一些性能......但我希望它是最小的。

【讨论】:

    【解决方案2】:

    郑重声明:hgourvest 已将Delphi Chromium Embedded 发布到 Google 代码。

    编辑 2013-01-15:

    同一作者的另一个项目这次包装了 CEF3:DCEF3

    【讨论】:

      【解决方案3】:

      如果实际上是 Chrome 作为您想要嵌入到应用程序中的浏览器,您应该查看Google Chrome Frame,它公开了 COM 接口,主要是为了集成到 Internet Explorer 中,但理论上我们应该能够访问它们也。

      (我不确定,因为我想亲自尝试一下,但是当我找到它们时,它会列在一个(很长的)清单上。) 更新:我快速尝试了一下,收到了“不支持接口”错误,并发布了here

      【讨论】:

      • 我认为他在谈论 V8 解释器而不是 chrome 框架。 V8 可以在任何应用程序中独立使用,但我们需要一个 Delphi 的包装器。
      • 弗朗西斯:我真的希望他在谈论 V8 解释器,也希望有人发布比我更好的答案...有人懂日语吗? google.com/…
      • 我指的是V8解释器。
      【解决方案4】:

      【讨论】:

      • 好消息!我考虑过 SpiderMonkey Bridge(Malzilla 使用它),但它已经有几年历史了,我想要一些可以与支持 unicode 的 Delphi 新版本(2009 和 2010)一起使用的东西。
      【解决方案5】:

      我也一直在使用 SpiderMonkey 桥,没有任何问题。运行速度相当快,占用空间不大,而且还没有 Unicode 问题!

      【讨论】:

        【解决方案6】:

        从 2016 年 6 月 1 日开始,我们有 v8delphiwrapper,感谢开发者 @zolagiggszhou。我想向您展示一些代码示例:

        运行js代码,返回结果为string:

        Memo2.Text := FEngine.eval(Memo1.Text);
        

        从js访问Delphi对象:

        1 - 假设你有一个这样的 Delphi 类:

          TJsAccessableClass = class
          public
            function add(a,b: Double): Double;
            function httpEncode(const s: string): string;
          end;
        

        2 - 你用 v8 js 引擎注册它:

          FObjectTemplate2 := FEngine.RegisterRttiClass(TJsAccessableClass);
          FJsAccessableObject := FObjectTemplate2.CreateInstance(TJsAccessableClass.Create);
          Fv8GlobalObject.SetObject('delphiObj', FJsAccessableObject);
        

        3 - 现在您可以从 js 调用您的 Delphi 方法

        var s = delphiObj.httpEncode('/~!f234');
        

        非常酷!更多示例请查看v8delphiwrapper sample project

        【讨论】:

          猜你喜欢
          • 2012-07-10
          • 2015-06-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-05
          • 1970-01-01
          • 1970-01-01
          • 2011-01-21
          相关资源
          最近更新 更多