Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Google Chrome';来自Delphi的V8 JavaScript解释器?_Javascript_Delphi - Fatal编程技术网

如何使用Google Chrome';来自Delphi的V8 JavaScript解释器?

如何使用Google Chrome';来自Delphi的V8 JavaScript解释器?,javascript,delphi,Javascript,Delphi,我想在我的Delphi应用程序中嵌入Google Chrome附带的V8 JavaScript解释器。我知道Google的开源项目,但我想知道是否有人知道任何Pascal/Delphi包装器 有一个示例项目包含在我链接的站点上的zip文件中,它是用C++编写的。如果没有别的事,我会慢慢地、痛苦地去改变它 更新:我只想嵌入V8 JavaScript解释器,而不是Chrome浏览器。如果你想将Chrome作为浏览器嵌入到你的应用程序中,你应该检查一下,它公开COM接口,主要是为了集成到Interne

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

有一个示例项目包含在我链接的站点上的zip文件中,它是用C++编写的。如果没有别的事,我会慢慢地、痛苦地去改变它


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

如果你想将Chrome作为浏览器嵌入到你的应用程序中,你应该检查一下,它公开COM接口,主要是为了集成到Internet Explorer中,但理论上我们也应该能够访问它们

(我不确定,因为我想自己尝试一下,但这是一个(很长的)清单,上面列出了当我开始尝试时可以尝试的非常好的东西。)
更新:我快速尝试了一下,发现了一个“不支持接口”的错误,并发布了它。

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

  • 如果您使用的是Prism,请阅读以下内容:。 RemObjects制作了一个免费开放的脚本引擎,支持ECMA脚本(JavaScript)和PascalScript。这都是pascal代码,但它依赖于DotNet(RemObjects当然是在Prism中编写的)

  • 有一个。看看他们是怎么做到的可能会很有趣

  • 这里有一个V8 Swig脚本,但是让Swig与Delphi一起工作本身可能是一个挑战:

  • 您可以在Delphi应用程序中使用FireFox中的JavaScript引擎


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

      记录在案:hgourvest已发布到谷歌代码

      编辑2013-01-15:


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

      从2016年6月1日开始,我们对开发者@zolagiggszhou表示敬意。我想向您展示一些代码示例:

      运行js代码并将结果作为
      字符串返回
      : 从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');
      

      很酷!更多示例请检查

      您是想嵌入Chronium浏览器还是只嵌入V8 javascript引擎?我只想嵌入V8 javascript引擎…而不是浏览器。一年后:您成功了吗?我想他说的是V8解释器,而不是chrome框架。V8可以在任何应用程序中独立使用,但我们需要一个Delphi的包装器。弗朗西斯:我真的希望他说的是V8解释器,而且有人发布了一个比我更好的答案。。。有人懂日语吗?我指的是V8解释器。好消息!我考虑过SpiderMonkey桥(Malzilla使用它),但它已经有几年的历史了,我希望它能与新的启用unicode的Delphi版本(2009和2010)配合使用。
      var s = delphiObj.httpEncode('/~!f234');