2012-01-15 91 views
2

我使用附加组件生成器测试版(火狐)和我试图做这样的事情:如何转换的Firefox扩展喷气背包 - >到Firefox插件SDK扩展

(有3个部分的附加组件生成器:库,数据,库)

  1. 获取从数据部“ def.htm”文件,并在新标签页 打开它我这个做:

    var tabs = require("tabs"); 
    var data = require("self").data; 
    tabs.open(data.url('def.htm')); 
    
  2. 获取JSON定义来来往往M “def.htm” def.htm看起来是这样的:

    <html><head> 
    <title>Def title</title> 
    </head><body> 
    <script type="text/javascript"> 
        this.definition = { 
         aaa: 1000, 
         bbb: { 
          ccc: { 
           ddd: "eee", 
           ... 
           ... 
        }; 
    </script> 
    </body></html> 
    
  3. 调用JS功能,通过定义它:

它的工作原理与Jetpack的扩展名(在Firefox 3.5) ,这里是代码:

jetpack.tabs.onReady(function() { 
    var window = this.contentWindow.wrappedJSObject; 
    var def = window.definition; 

    dowork (def); 
}); 

我需要在附加SDK上相同的功能。

回答

1

这是一个相当奇怪的方法,你为什么试图以如此复杂的方式获取JSON数据?如何把它变成一个文件data/definition.json(正确编码则):

{ 
    "aaa": 1000, 
    "bbb": { 
     "ccc": { 
      "ddd": "eee", 
      ... 
      ... 
}; 

并采用request package读出来:

var Request = require("request").Request; 
var data = require("self").data; 
Request({ 
    url: data.url("definitions.json"), 
    onComplete: function(response) 
    { 
    dowork(response.json); 
    } 
}); 

但如果你真的想在一个标签来访问数据 - 添加-on SDK不允许直接访问您的扩展程序中的内容页面。您可以使用page-mod package将内容脚本插入此页面,然后将该数据发送回该扩展。沿着这些线路的东西:

var PageMod = require("page-mod").PageMod; 
PageMod({ 
    include: data.url("def.htm"), 
    contentScriptWhen: 'end', 
    contentScript: 'self.postMessage(definition)', 
    onAttach: function onAttach(worker) 
    { 
    worker.on("message", function(data) 
    { 
     dowork(data); 
    }); 
    } 
});