V8系列之C++调用js函数

下面写个程序,用来演示在C++中通过V8调用js函数

int js_load_data(char *buf) {
  //声明v8虚拟机
  Isolate* isolate;
//进入v8虚拟机内部,初始化v8运行环境
  Isolate::Scope isolate_scope(isolate);  
//创建句柄集合
  HandleScope handle_scope(isolate);
//创建v8运行上下文
Local<ObjectTemplate> global = ObjectTemplate::New(isolate);
  Local<Context> context = Context::New(isolate, NULL, global);
  Context::Scope context_scope(context);

  //获取js函数
  Local<String> func_name = String::NewFromUtf8(isolate, "load_data", NewStringType::kNormal).ToLocalChecked();
  Local<Value> func_value;
  if (!context->Global()->Get(context, func_name).ToLocal(&func_value) || !func_value->IsFunction()) {
    return -1;
  }
  //转换成js函数对象
  Local<Function> js_func = Local<Function>::Cast(func_value);
  //调用处理函数
  TryCatch try_catch(isolate);
  const int argc = 1;
  Local<Value> argv[argc] = {buf};
  Local<Value> result;
  if (!js_func->Call(context, context->Global(), argc, argv).ToLocal(&result)) {
    String::Utf8Value error(try_catch.Exception());
    printf("js_load_data error, : %s", *error);
    return -1;
  }
  return 0;
}
时间: 2024-11-05 22:47:23

V8系列之C++调用js函数的相关文章

C++通过V8调用js函数

现在写个函数,在C++中调用js函数, int V8_Manager::js_load_player_data(Block_Buffer *buf) { //执行V8代码前,必须先进入V8的Isolate,初始化V8运行环境 Isolate::Scope isolate_scope(isolate_); HandleScope handle_scope(isolate_); Local<Context> context = Local<Context>::New(isolate_,

VC与JavaScript交互(二) ———— 调用JS函数

这一章,我们来动手实践VC调用JS函数. 我们动手写一个HTML,其中包含这样一段JS代码: [html] view plaincopy <script type="text/javascript"> function Add(value1, value2) { return value1 + value2; } </script> 然后我们用WebBrowser加载这个HTML后,在VC中这样来调用这个函数名为Add的JS函数: [cpp] view plai

服务器控件调用JS函数

是服务器端控件,不能在JS里直接调用,但可以在aspx.cs 里写方法可以调用JS函数,比如JS方法名称是check(), function check() {   alert(document.getElementById("ltr1").value); } 在a.aspx  <asp:Literal ID="ltr1" runat="server" > </asp:Literal> <asp:Button ID=

在COM组件中调用JS函数

要求是很简单的,即有COM组件A在IE中运行,使用JavaScript(JS)调用A的方法longCalc(),该方法是一个耗时的操作,要求通知IE当前的进度.这就要求使用回调函数,设其名称为scriptCallbackFunc.实现这个技术很简单: 1 .组件方(C++) 组件A 的方法在IDL中定义: [id(2)] HRESULT longCalc([in] DOUBLE v1, [in] DOUBLE v2, [in, optional] VARIANT scriptCallback);

Java中通过脚本引擎调用js函数

1 import java.io.*; 2 import javax.script.Invocable; 3 import javax.script.ScriptEngine; 4 import javax.script.ScriptEngineManager; 5 import javax.script.ScriptException; 6 import org.slf4j.Logger; 7 import org.slf4j.LoggerFactory; 8 import com.ppcre

JAVA调用JS函数

今天在开发中使用到了js和Java的交互,平时我们用的比较多的就是js调用Java的方法,可以使用dwr.Ajax.jquery.突然发现要Java调用js的话还真没有见过,今天上网查询了下资料,顺便总结一下: 前提条件:jdk1.6才支持,1.6以前的就不行了. js代码如下: function convert (id,str) { if ('505041'==id) { return str; } else { return "A"; } } Java代码如下: package c

JavaScript基础 超链接调用js函数

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"

AS与JS相互通信(Flex中调用js函数)

Flex中As调用Js的方法是:      1.导入包 (import flash.external.ExternalInterface;)      2.使用ExternalInterface.call("Js函数名称",参数)进行调用,其返回的值就是Js函数所返回的值 Js调用As的方法是:      1.导入包 (import flash.external.ExternalInterface;)      2.在initApp中使用ExternalInterface.addCal

Python代码调用JS函数

采集过程中,遇到了一个token是经过JS加密生成的,于是乎进行JS断点追踪,生成了完整的生成token值的JS函数文件. 这个JS函数需要在Python代码中调用,通过输入一个参数,然后会输出一个token值. 所需模块: pip install pyexecjs 注意:这里安装的模块叫:pyexecjs, 但是调用的时候的名字是:execjs 具体调用步骤: # -*- coding: utf-8 -*- import execjs def get_js(): # f = open("./.