v8无法从新上下文中编译的脚本访问属性

时间:2011-06-17 19:17:16

标签: javascript c++ v8 embedded-v8

我创建了一个简单的'require'机制(https://gist.github.com/1031869),其中包含的脚本在新的上下文中编译和运行。但是,当我在包含的脚本中调用函数并将其传递给this时,包含的脚本中不会看到任何属性。

//required.js - compiled and run in new context
exports.logThis = function(what){
    for (key in what) log(key + ' : ' + what[key]);
}

//main.js
logger = require('required');
this.someProp = {some: 'prop'}
logger.logThis({one: 'two'});   //works, prints 'one : two'
logger.logThis(this); //doesn't work, prints nothing. expected 'some : prop'
logger.logThis(this.someProp); //works, prints 'some : prop'

1 个答案:

答案 0 :(得分:4)

问题是V8不允许Context访问另一个Context的全局变量。因此,logger.log这个(这个)没有打印任何内容。

通过在新上下文中设置安全令牌,解决了这个问题:

moduleContext->SetSecurityToken(context->GetSecurityToken());

其中context是'main'上下文,moduleContext是包含脚本运行的新上下文。