Użyłem silnika v8 do stworzenia programu, można uruchomić kody JS, takie jak:jak stworzyć PRAWDZIWY obiekt globalny w wersji 8?
alert ("test"); // funkcja alertu jest tworzona w C++ i ustawia globalny na kontekst v8. więc można go uruchomić.
window.name = 'aa'; // obiekt okna jest eksportowany z środowiska C++ do v8.
Ale, jeśli mogę ustawić właściwość obiektu window jak:
window.name = 'aa';
następnie odwiedzam:
alert (nazwa); // --------> spowodował błąd, którego nazwa jest niezdefiniowana ...
W przeglądarce Chrome możemy ustawić właściwość, dowolny ciąg znaków dla nazwy właściwości okna. działa dobrze.
Jak mogę to zrealizować? wygląda na to, że okno jest prawdziwe globalnie w kontekście JS.
Mój kod:
Isolate* isolate = Isolate::GetCurrent();
Isolate::Scope isolate_scope(isolate);
HandleScope handle_scope(isolate);
Handle<ObjectTemplate> global = ObjectTemplate::New(isolate);
v8::Handle<v8::FunctionTemplate> log_ft = v8::FunctionTemplate::New(isolate, log_Callback);
log_ft->InstanceTemplate()->SetInternalFieldCount(1);
global->Set(isolate, "alert", log_ft);
Handle<Context> context = Context::New(isolate, NULL, global);
Context::Scope context_scope(context);
// set global objects and functions
Local<Object> obj(Object::New(isolate));
context->Global()->Set(String::NewFromUtf8(isolate, "window"), obj);
runJSCode(context, (char*)"window.name =33; alert(name);");
std::cout << "********* v8 executed finished !! ********** \n";
return 0;
Proszę rozważyć edycję swojego wpisu, aby dodać więcej wyjaśnień na temat tego, co robi twój kod i dlaczego to rozwiąże problem. Odpowiedź, która najczęściej zawiera kod (nawet jeśli działa) zazwyczaj nie pomoże OP zrozumieć jego problemu. – Reeno