Firefox Sandbox функция импорта из пространства имен? - PullRequest
1 голос
/ 25 января 2012

Я бы хотел выполнить набор функций из пространства имен в песочнице внутри плагина, который я сейчас разрабатываю, я сделал что-то вроде этого:

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};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...