如何在C ++中从V8调用Javascript函数

计划我修订

要使用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);

请注意,每次获得a时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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从 JS (V8) 中 C++ 对象的引用调用函数

来自分类Dev

在Odoo v8中,如何在给定表中创建记录时调用一个函数?

来自分类Dev

从Web Worker线程调用C ++ v8函数

来自分类Dev

V8 模块导出调用 C++ 的函数

来自分类Dev

v8,libuv,nodejs,win32 API-如何调用EnumWindows并具有回调调用javascript函数?

来自分类Dev

V8 JavaScript如何进行异步调用

来自分类Dev

如何在javascript v8生成器代码中调用赋予yield的回调?

来自分类Dev

在V8 JavaScript引擎中,如何使每个实例重新使用ObjectTemplate的构造函数?

来自分类Dev

将C ++函数绑定到V8时调用SetAccessor时出错

来自分类Dev

如何获得v8函数以返回c ++对象?

来自分类Dev

如何在V8中存储持久句柄?

来自分类Dev

如何在OSX中替换Chromium的V8库?

来自分类Dev

如何在IBM MobileFirst V8中测试连接

来自分类Dev

如何在HTML JavaScript中调用mfc C ++函数以及如何在mfc C ++中调用JavaScript函数?

来自分类Dev

如何在C中调用Rust函数?

来自分类Dev

如何在C ++中调用外部函数?

来自分类Dev

如何删除 Bing Maps V8 Javascript API 中的军械测量选项?

来自分类Dev

如何在VBA中调用JavaScript函数?

来自分类Dev

如何在JavaScript中调用jquery函数?

来自分类Dev

如何在iframe中调用javascript函数?

来自分类Dev

如何在JavaScript中调用嵌套函数?

来自分类Dev

如何在JavaScript中调用嵌套函数?

来自分类Dev

如何在iframe中调用javascript函数?

来自分类Dev

如何在VBA中调用JavaScript函数?

来自分类Dev

如何在javascript中调用递归函数

来自分类Dev

如何在 PHP 中调用 JavaScript 函数?

来自分类Dev

如何在javascript中的主函数中调用函数

来自分类Dev

如何在javascript中的主函数中调用函数

来自分类Dev

如何在C中从ASM调用C函数?

Related 相关文章

  1. 1

    从 JS (V8) 中 C++ 对象的引用调用函数

  2. 2

    在Odoo v8中,如何在给定表中创建记录时调用一个函数?

  3. 3

    从Web Worker线程调用C ++ v8函数

  4. 4

    V8 模块导出调用 C++ 的函数

  5. 5

    v8,libuv,nodejs,win32 API-如何调用EnumWindows并具有回调调用javascript函数?

  6. 6

    V8 JavaScript如何进行异步调用

  7. 7

    如何在javascript v8生成器代码中调用赋予yield的回调?

  8. 8

    在V8 JavaScript引擎中,如何使每个实例重新使用ObjectTemplate的构造函数?

  9. 9

    将C ++函数绑定到V8时调用SetAccessor时出错

  10. 10

    如何获得v8函数以返回c ++对象?

  11. 11

    如何在V8中存储持久句柄?

  12. 12

    如何在OSX中替换Chromium的V8库?

  13. 13

    如何在IBM MobileFirst V8中测试连接

  14. 14

    如何在HTML JavaScript中调用mfc C ++函数以及如何在mfc C ++中调用JavaScript函数?

  15. 15

    如何在C中调用Rust函数?

  16. 16

    如何在C ++中调用外部函数?

  17. 17

    如何删除 Bing Maps V8 Javascript API 中的军械测量选项?

  18. 18

    如何在VBA中调用JavaScript函数?

  19. 19

    如何在JavaScript中调用jquery函数?

  20. 20

    如何在iframe中调用javascript函数?

  21. 21

    如何在JavaScript中调用嵌套函数?

  22. 22

    如何在JavaScript中调用嵌套函数?

  23. 23

    如何在iframe中调用javascript函数?

  24. 24

    如何在VBA中调用JavaScript函数?

  25. 25

    如何在javascript中调用递归函数

  26. 26

    如何在 PHP 中调用 JavaScript 函数?

  27. 27

    如何在javascript中的主函数中调用函数

  28. 28

    如何在javascript中的主函数中调用函数

  29. 29

    如何在C中从ASM调用C函数?

热门标签

归档