wil*_*ark 5 javascript scope google-chrome v8 window
我用v8引擎创建程序,它可以运行JS代码,如:
警报( '试验'); // alert函数在C++中创建,并设置为v8上下文.所以它可以运行.
window.name ='aa'; // window对象从C++导出到v8环境.
但是,如果我将属性设置为窗口对象,如:
window.name ='aa';
然后,我访问它:
警报(名); // -------->这导致错误,名称未定义...
在Chrome中,我们可以为窗口属性名称设置属性,任何字符串.它运行正常.
那么我该如何实现呢?似乎窗口在JS上下文中是真正的全局.
我的代码:
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;
Run Code Online (Sandbox Code Playgroud)
小智 -3
//Local<Object> obj( Object::New(isolate));
//context->Global()->Set( String::NewFromUtf8(isolate, "window"), obj );
runJSCode(context, (char*)"window=this; window.name =33; alert(name);");
Run Code Online (Sandbox Code Playgroud)
==== 就这么简单-_-!
| 归档时间: |
|
| 查看次数: |
1894 次 |
| 最近记录: |