我已经将v8嵌入到c++应用程序中。参考https://chromium.googlesource.com/v8/v8/+/master/samples/hello-world.cc,我能够运行javascript。测试并运行良好。
我访问我的c++应用程序的链接,下载html数据,下载javascript。一些嵌入脚本在html调用函数中的外部脚本文件。如何确保外部脚本可供嵌入式脚本使用?
下载的JavaScript文件(一个或多个)可能较大。在这种情况下,如何使用JavaScript执行v8中的HTML?在JavaScript中运行v8的代码如下,
// 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为200 to,我如何才能将如此大的缓冲区提供给v8::Script::Compile。当我有多个文件时,如何才能将它们提供给v8呢?
发布于 2019-06-22 11:55:46
如何确保外部脚本可供嵌入式脚本使用?
首先加载外部脚本。
如何使用JavaScript执行HTML?
你是说DOM?window,document等等吗?DOM不是ECMAScript的一部分,所以V8对它一无所知;它是由嵌入式程序(通常是Chrome)提供的。在您自己的嵌入中,您需要使用V8的API自己提供所有这些对象。不用说,这是一项巨大的工作。如果您想要的是一种呈现网站的方法,那么我建议您为此使用一些现有的组件/库,例如,或者您最喜欢的GUI工具包的WebView (或它的名称)。
假设下载的JavaScript为200 to,我如何才能将如此大的缓冲区提供给v8::Script::Compile?
就像向V8提供一个小脚本一样:将其放入v8::Local<v8::String>中,然后调用v8::Script::Compile和v8::Script::Run。
当我有多个文件时,如何才能将它们提供给v8呢?
重复调用v8::Script::Compile和v8::Script::Run,可能使用循环。有关示例,请参见V8的壳样,特别是函数RunMain。
当我在HTTP数据包(块)中接收到部分JavaScript时,可以将部分JavaScript传递给V8吗?
是的,V8有一个脚本流接口。请参阅v8::ScriptCompiler::ExternalSourceStream的API文档。关于如何使用它的例子,您可以学习测试。对于200 is大小的脚本来说,流可能值得,也可能不值得;它绝对不是必需的。
https://stackoverflow.com/questions/56713286
复制相似问题