Hi,

I am new to V8 and trying to create some bindings between my C++ and JS 
code. The issue is that I am not able to access a global Javascript 
variable across different Javascript functions. The reason is because each 
Javascript function is called my different C++ function. I guess the 
problem with my code is that I am creating a new local context within each 
C++ function.

*My JS Code:*

var test = [];

function f1()
{
      var obj = {};
      obj.name = "Testing";
      test.push(obj);
}

function f2()
{
     var value = test[0].name;
}

*My C++ code:*

class Test {

          v8::Persistent<v8::Script> compiledScript;
          v8::Local<v8::Value> result;
          v8::Isolate* isolate;
          v8::Persistent<v8::Context> context;

          Test(filePath) {

                    // Create and allocate isolate

                    v8::Locker isolateLocker(isolate);
                    v8::Isolate::Scope isolate_scope(isolate);
                    v8::HandleScope handle_scope(isolate);

                   // Create some bindings

                   v8::Local<v8::Context> con = v8::Context::New(isolate, 
nullptr, binding_template);
                   con->SetAlignedPointerInEmbedderData(0, &binder);

                   context.Reset(isolate, con);
                   v8::Context::Scope context_scope(con);

                  std::string source_file = LoadFile(filePath);
                  v8::Local<v8::String> sourceScript = 
v8::String::NewFromUtf8(isolate, source_file.c_str(), 
v8::NewStringType::kNormal).ToLocalChecked();
                  v8::Local<v8::Script> script = v8::Script::Compile(con, 
sourceScript).ToLocalChecked();
                  compiledScript.Reset(isolate, script);
         }

         void function1() 
         {
                 v8::Locker isolateLocker(isolate);
                 v8::Isolate::Scope isolate_scope(isolate);
                 v8::HandleScope handle_scope(isolate);

                 v8::Local<v8::Context> con= 
v8::Local<v8::Context>::New(isolate, context);
                 v8::Local<v8::Script> script = 
v8::Local<v8::Script>::New(isolate, compiledScript);

                 v8::Context::Scope context_scope(con);

                 // Code to call the Javascript function f1

         }

         void function2()
         {
                 v8::Locker isolateLocker(isolate);
                 v8::Isolate::Scope isolate_scope(isolate);
                 v8::HandleScope handle_scope(isolate);

                 v8::Local<v8::Context> con = 
v8::Local<v8::Context>::New(isolate, context);
                 v8::Local<v8::Script> script = 
v8::Local<v8::Script>::New(isolate, compiledScript);

                 v8::Context::Scope context_scope(con);

                  // Code to call the Javascript function f2

         }

When the above JS code compiles, I get an error that says name is a 
property of undefined. My understanding is that variable test is not 
recognized in second function probably because they are executing in 
different contexts. Can someone please help me understand and fix the issue?

Any help will be greatly appreciated :)

Thanks,
Kavin

-- 
-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to