如何使用Google Chrome';来自Delphi的V8 JavaScript解释器?
我想在我的Delphi应用程序中嵌入Google Chrome附带的V8 JavaScript解释器。我知道Google的开源项目,但我想知道是否有人知道任何Pascal/Delphi包装器如何使用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
有一个示例项目包含在我链接的站点上的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');