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