v8 Невозможно получить доступ к свойствам из скрипта, скомпилированного в новом контексте - PullRequest
3 голосов
/ 17 июня 2011

Я создал простой механизм '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 Ответ

4 голосов
/ 28 июня 2011

Проблема заключалась в том, что V8 не позволяет контексту получать доступ к глобальным переменным другого контекста.Следовательно, logger.logЭто (это) ничего не печатало.

Это было решено путем установки токена безопасности в новом контексте:

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

, где контекст является «основным»context и moduleContext - это новый контекст, в котором выполняется включенный скрипт.

...