如何在 C++ 中从 V8 调用 Javascript 函数
How to call a Javascript function from V8 in C++
要使用v8运行一个简单的Javascript程序,我按如下方式进行操作:
// Create a string containing the JavaScript source code.
v8::Local<v8::String> source = v8::String::NewFromUtf8(isolate, "'Hello' + ', from Javascript!'", 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();
如何在/path/to/my_js_functions.js文件中调用 Javascript 函数?
function myJsFunction(stringParam) {
return stringParam // The function returns a stringParam from the parameter
}
提前谢谢大家。
首先,你必须掌握函数对象。假设它在全局范围内(== 在全局对象上(,您可以像这样访问它:
v8::Local<v8::String> name = v8::String::NewFromUtf8(
isolate, "myJsFunction", v8::NewStringType::kInternalized).ToLocalChecked();
v8::Local<v8::Value> obj =
context->Global()->Get(context.local(), name).ToLocalChecked();
if (!obj->IsFunction()) {
/* someone overwrote it, handle error */
}
v8::Local<v8::Function> my_function = v8::Local<v8::Function>::Cast(obj);
请注意,每次获得MaybeLocal
时,结果都可能为空,这在引发异常时发生。如果您不能保证不会发生这种情况,那么您不应该只使用.ToLocalChecked()
(当MaybeLocal
为空时会崩溃(,而是应该正确检查和处理错误情况。
一旦你有一个函数,你可以为它准备参数并调用它:
v8::Local<v8::Value> receiver = ...;
int argc = ...;
v8::Local<v8::Value> args[argc] = ...;
v8::MaybeLocal<v8::Value> result = my_function->Call(context.local(), receiver, argc, args);
同样,结果是一个MaybeLocal
,因为函数可以抛出异常(显式地,或者通过调用/执行抛出的东西间接地(。由你来捕获任何错误情况,否则将结果Cast
到适当的类型并对其进行处理。
(通过C++ API使用JavaScript并不令人愉快。这主要是由于两种语言之间的许多概念差异。
有关更多示例,请查看 V8 的 test-api.cc。
相关文章:
- 如何使用EM_JS从带有参数的C++调用javascript方法
- 如何在 C++ 中从 V8 调用 Javascript 函数
- 从C++代码抛出错误调用 JavaScript 回调函数 - nbind
- node.js Nan:在函数C++调用 JavaScript 回调
- 如何使用 cocos creator 在 Cocos2d-X/Cocos2d-JS 中调用 javascript 函数并
- v8.从 C++ 保存和调用 JavaScript 函数
- 在WindBG断点命令中调用JavaScript函数
- 在V8中从C++回调调用Javascript函数
- 从QT调用JavaScript函数,并未显示输出
- 使用node.js从C++调用JavaScript
- 如何使用 WebKit 调用 JavaScript 中的C++函数
- NodeJS Addon从NAN AsyncWorker::Execute内部调用Javascript回调
- 使用 Emscripten 异步调用 JavaScript C++函数
- 从 C++ 节点调用 JavaScript 函数.js扩展
- ActiveX 调用 Javascript 函数
- 从C++调用javascript函数
- 通过c++调用javascript推送服务
- 如何使用V8从C++访问和调用Javascript对象属性和方法
- 如何在QWebengine中调用Javascript中的c++ /Qt函数
- v8,libuv,nodejs,win32api-如何调用EnumWindows并具有回调调用javascript函数