我已经将v8嵌入到我的c ++应用程序中。引用https://chromium.googlesource.com/v8/v8/+/master/samples/hello-world.cc,我可以运行JavaScript。经过测试,工作正常。
我从c ++应用程序访问链接,下载html数据,下载javascript。 html调用函数中的某些嵌入式脚本在外部脚本文件中。如何确保外部脚本可用于嵌入式脚本?
下载的JavaScript文件(一个或多个)可能很大。在这种情况下,如何使用v8执行HTML中存在的JavaScript api?下面是在v8中运行JavaScript的代码,
// Create a string containing the JavaScript source code.
v8::Local<v8::String> source =
v8::String::NewFromUtf8(isolate, "'Hello' + ', World!'",
v8::NewStringType::kNormal)
.ToLocalChecked();
// Compile the source code.
v8::Local<v8::Script> script =
v8::Script::Compile(context, source).ToLocalChecked();
// Run the script to get the result.
v8::Local<v8::Value> result = script->Run(context).ToLocalChecked();
假设下载的JavaScript为200KB,如何将如此大的缓冲区提供给v8 :: Script :: Compile api。当我有多个文件时,如何将它们输入v8?
答案 0 :(得分:1)
如何确保嵌入式脚本可以使用外部脚本?
您首先加载外部脚本。
如何使用v8执行HTML中存在的JavaScript API?
您是指DOM吗? window
,document
等? DOM不是ECMAScript的一部分,因此V8对此一无所知。它是由嵌入程序(即通常为Chrome)提供的。在自己的嵌入中,您需要使用V8的API自己提供所有这些对象。不用说,这是一个很大的工作。如果您所追求的是一种呈现网站的方法,那么我建议您为此使用一些现有的组件/库,例如Chromium嵌入式框架或您最喜欢的GUI工具包的WebView(或任何被称为的东西)。>
假设下载的JavaScript为200KB,如何将如此大的缓冲区提供给v8 :: Script :: Compile API?
就像向V8提供一个小脚本一样:将其放入v8::Local<v8::String>
,然后调用v8::Script::Compile
和v8::Script::Run
。
当我有多个文件时,如何将它们输入v8?
可能通过循环重复调用v8::Script::Compile
和v8::Script::Run
。例如,请参见V8的shell sample,尤其是函数RunMain
。
当我在HTTP数据包(块)中收到部分JavaScript时,可以将部分JavaScript传递给V8吗?
是的,V8具有脚本流接口。请参阅v8::ScriptCompiler::ExternalSourceStream
的API文档。有关如何使用它的示例,您可以研究tests。对于200KB的脚本来说,流传输是否值得?绝对不是必需的。