如何运行JavaScript文件-V8

时间:2019-06-22 06:52:00

标签: c++ v8

我已经将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?

1 个答案:

答案 0 :(得分:1)

  

如何确保嵌入式脚本可以使用外部脚本?

您首先加载外部脚本。

  

如何使用v8执行HTML中存在的JavaScript API?

您是指DOM吗? windowdocument等? DOM不是ECMAScript的一部分,因此V8对此一无所知。它是由嵌入程序(即通常为Chrome)提供的。在自己的嵌入中,您需要使用V8的API自己提供所有这些对象。不用说,这是一个很大的工作。如果您所追求的是一种呈现网站的方法,那么我建议您为此使用一些现有的组件/库,例如Chromium嵌入式框架或您最喜欢的GUI工具包的WebView(或任何被称为的东西)。

  

假设下载的JavaScript为200KB,如何将如此大的缓冲区提供给v8 :: Script :: Compile API?

就像向V8提供一个小脚本一样:将其放入v8::Local<v8::String>,然后调用v8::Script::Compilev8::Script::Run

  

当我有多个文件时,如何将它们输入v8?

可能通过循环重复调用v8::Script::Compilev8::Script::Run。例如,请参见V8的shell sample,尤其是函数RunMain

  

当我在HTTP数据包(块)中收到部分JavaScript时,可以将部分JavaScript传递给V8吗?

是的,V8具有脚本流接口。请参阅v8::ScriptCompiler::ExternalSourceStream的API文档。有关如何使用它的示例,您可以研究tests。对于200KB的脚本来说,流传输是否值得?绝对不是必需的。