v8c++;和JS:如何在上下文之间共享对象

v8c++;和JS:如何在上下文之间共享对象,v8,V8,我正在寻找一种方法/解决方案,用于将声明到上下文(即上下文a)中的js对象共享到另一个上下文(即上下文B)中。两者都在同一隔离区。 详细内容: 我使用V8C++包装器使C++类(即CPPYORE)成为JS代码。因此,我可以将cppClass.myfunction()或cppClass.myProperty直接调用到js代码中 我只有一个独立的主上下文,用于加载和运行复杂的js文件(由许多js文件和声明的许多对象/函数组成) 此外,我还有其他运行其他简单js代码的上下文。所有上下文都在同一个位置

我正在寻找一种方法/解决方案,用于将声明到上下文(即上下文a)中的js对象共享到另一个上下文(即上下文B)中。两者都在同一隔离区。 详细内容: 我使用V8C++包装器使C++类(即CPPYORE)成为JS代码。因此,我可以将cppClass.myfunction()或cppClass.myProperty直接调用到js代码中

我只有一个独立的主上下文,用于加载和运行复杂的js文件(由许多js文件和声明的许多对象/函数组成)

此外,我还有其他运行其他简单js代码的上下文。所有上下文都在同一个位置

假设在contextA中声明并使用一个AOObject,其属性类似于AOObject.foo=10。我想知道是否可以访问ContextB中的AOObject并读取/更改AOObject.foo属性,例如:

    // JS code in ContextA
    var AObject=new cppClass();
    AOBject.foo=10;
    ...

// JS code in ContextB
    var newvalue=AObject.foo +1; //or something like myWrapMethod.AObject.foo+1;
    Console.Log(" The new value is : " + newvalue );
    // The new value is : 11
我可以从ContextB访问AOObject(即调用其函数或设置其属性/属性)吗? 先谢谢你


安德里亚

我的问题的一个可能答案是以下方法。在C++中,假设有以下代码:

   Handle<Context> contextA=myIsolate::GetCurrentContext();
    ... some code
    Handle<Context> contextB=GetMyBContext();
    ... some code

    contextA->Enter(); // change the context to A Context

    auto global_obj = contextA->Global();
    v8::Local<v8::Value> desiredValue = global_obj->Get(String::NewFromUtf8(myIsolate,"AObject"));
    contextA->Exit(); // change the context to B Context
    // Now  AObject can be used also in the context B (another script js)
   myIsolate->GetCurrentContext()->Global()->Set(v8::String::NewFromUtf8(myIsolate, "AObject"), desiredValue ->ToObject());
Handle contextA=myIsolate::GetCurrentContext();
... 一些代码
Handle contextB=GetMyBContext();
... 一些代码
contextA->Enter();//将上下文更改为上下文
自动全局_obj=contextA->global();
v8::Local desiredValue=global_obj->Get(字符串::NewFromUtf8(myIsolate,“AOObject”);
contextA->Exit();//将上下文更改为B上下文
//现在AOObject也可以在上下文B中使用(另一个脚本js)
myIsolate->GetCurrentContext()->Global()->Set(v8::String::NewFromUtf8(myIsolate,“AOObject”),desiredValue->ToObject());
之后,在js文件(与B上下文相关)中,我可以使用与AContext中的值相同的AOObject

希望对大家有用。 亲切的问候


Andrea

您应该将两个上下文安全令牌设置为相同。 然后可以从上下文中获取对象引用,并从另一个上下文中存储/使用它

从v8.h头文件:

  /**
   * Sets the security token for the context.  To access an object in
   * another context, the security tokens must match.
   */
  void SetSecurityToken(Local<Value> token);
/**
*设置上下文的安全令牌。在中访问对象的步骤
*在另一个上下文中,安全令牌必须匹配。
*/
void SetSecurityToken(本地令牌);