Я бы хотел выполнить набор функций из пространства имен в песочнице внутри плагина, который я сейчас разрабатываю, я сделал что-то вроде этого:
if (typeof namespace == "undefined") {
var namespace = {
foo:function(){return 0},
goo:function(){
var s = new Components.utils.Sandbox("http://code.google.com/p/headertool/");
//importing utility method inside the sandbox
s.importFunction(namespace.foo); //FAIL...
var result = Components.utils.evalInSandbox(code, s);
return result;
}
/**
* Constructor.
*/
(function() {
this.startup();
}).apply(namespace);
}
но когда я пытаюсь импортировать функцию, я получаю эту ошибку:
Error: uncaught exception: [Exception... "Illegal value" nsresult: "0x80070057
(NS_ERROR_ILLEGAL_VALUE)" location: "JS frame :: chrome://headertool/content
/overlay.js :: <TOP_LEVEL> :: line 321" data: no]
Я думаю, что это связано с тем, что функция, которую я пытаюсь импортировать, не соответствует текущему контексту, есть лучшее решение или единственный способ решить проблему - сделать функцию общедоступной в главном контексте, например:
if (typeof namespace == "undefined") {
var namespace = {
goo:function(){
var s = new Components.utils.Sandbox("http://code.google.com/p/headertool/");
//importing utility method inside the sandbox
s.importFunction(namespace.foo); //OK...
var result = Components.utils.evalInSandbox(code, s);
return result;
}
/**
* Constructor.
*/
(function() {
this.startup();
} ).apply(namespace);
};
//Global namespace
function foo(){return 0};