Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.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
如何运行JavaScript文件-V8 我已经将V8嵌入到C++应用程序中。我能够运行javascript。经过测试,效果良好 我从我的C++应用程序中访问链接,下载HTML数据,下载JavaScript。html中的一些嵌入式脚本调用外部脚本文件中的函数。如何确保外部脚本可用于嵌入式脚本_C++_V8 - Fatal编程技术网

如何运行JavaScript文件-V8 我已经将V8嵌入到C++应用程序中。我能够运行javascript。经过测试,效果良好 我从我的C++应用程序中访问链接,下载HTML数据,下载JavaScript。html中的一些嵌入式脚本调用外部脚本文件中的函数。如何确保外部脚本可用于嵌入式脚本

如何运行JavaScript文件-V8 我已经将V8嵌入到C++应用程序中。我能够运行javascript。经过测试,效果良好 我从我的C++应用程序中访问链接,下载HTML数据,下载JavaScript。html中的一些嵌入式脚本调用外部脚本文件中的函数。如何确保外部脚本可用于嵌入式脚本,c++,v8,C++,V8,下载的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!'",

下载的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源代码的字符串。
v8::本地源=
v8::String::NewFromUtf8(隔离,“'Hello'+',World!”,
v8::NewStringType::kNormal)
.ToLocalChecked();
//编译源代码。
v8::本地脚本=
v8::Script::Compile(上下文,源代码).ToLocalChecked();
//运行脚本以获得结果。
v8::Local result=script->Run(上下文).ToLocalChecked();
假设下载的javascript为200KB,如何将如此大的缓冲区提供给v8::Script::Compile api。当我有多个文件存在时,如何将它们提供给v8

如何确保外部脚本可用于嵌入式脚本

首先加载外部脚本

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

你是说DOM吗<代码>窗口,
文档
等?DOM不是ECMAScript的一部分,所以V8对它一无所知;由嵌入方提供(即通常为镀铬)。在您自己的嵌入中,您需要使用V8的API自己提供所有这些对象。不用说,这是一项巨大的工作。如果您想要的是一种呈现网站的方法,那么我建议您使用一些现有的组件/库,例如Chromium Embedded Framework,或者您最喜欢的GUI工具包的WebView(或其他任何名称)

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

就像向V8提供一个小脚本一样:将它放入
V8::Local
,然后调用
V8::script::Compile
V8::script::Run

当我有多个文件存在时,如何将它们提供给v8

反复调用
v8::Script::Compile
v8::Script::Run
,可能使用循环。例如,请参见V8,特别是函数
RunMain

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


是的,V8有一个脚本流接口。请参阅
v8::ScriptCompiler::ExternalSourceStream
的API文档。有关如何使用它的示例,您可以学习。对于小到200KB的脚本,流媒体可能值得,也可能不值得;这绝对不是必需的。

您所展示的只是v8示例的摘录,没有迹象表明有人试图在此处加载外部文件?我想象这个过程是一样的,读取到字符串,用相同的上下文编译,然后运行它们?我只是想知道,我应该将收到的javascript存储为文件并将文件传递到V8,还是在HTTP数据包(块)中接收到部分jsvascript时,我可以将部分javascript传递到V8。假设javascript的大小为100KB或更大,我需要把它作为字符串传递吗?或者,如果我们下载了超过1个Java脚本,会发生什么。我不明白为什么当计算机有千兆字节的RAM时,你会担心100kB的分配。字符串存储在堆中,因此在理论上,仅受操作系统公开的虚拟内存的限制。JavaScript是纯文本,所以你必须通过其中一个阅读器来加载它。也许v8支持从文件流或字节缓冲区读取,您应该查看api文档。一个“简单”和“肯定”的做法是将所有文件连接到一个字符串中并解析它。它是一个现有的C++应用程序。目前,无头铬合金不是我的选择。你的回答看起来对我很有帮助。我将探索并返回。是否有任何简单的示例来说明如何使用v8::ScriptCompiler::ExternalSourceStreamV8自己的测试(请参阅我文章中的链接)可能是最简单的示例。正如我所写的,使用流媒体不是必需的;如果您想优化以简化操作,那么就不要使用流,使用
String
。我可以使用V8执行javascript。我遇到了很多问题,包括内存泄漏和无效访问。我将在另一个问题中提出这个问题。