如何运行JavaScript文件-V8 我已经将V8嵌入到C++应用程序中。我能够运行javascript。经过测试,效果良好 我从我的C++应用程序中访问链接,下载HTML数据,下载JavaScript。html中的一些嵌入式脚本调用外部脚本文件中的函数。如何确保外部脚本可用于嵌入式脚本
下载的JavaScript文件(一个或多个)可能较大。在这种情况下,如何使用v8执行HTML中的JavaScript api?下面是在v8中运行JavaScript的代码如何运行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!'",
// 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。我遇到了很多问题,包括内存泄漏和无效访问。我将在另一个问题中提出这个问题。