如何转换firefox jetpack扩展 - > to firefox addon sdk扩展

时间:2012-01-15 16:31:39

标签: firefox tabs firefox-addon firefox-addon-sdk

我正在使用Add-on Builder Beta(Firefox),我正在尝试这样做:

(Addon Builder中有3个部分:Lib,Data,Libraries)

  1. 从数据部分获取“def.htm”文件并在新选项卡中打开它 我是这样做的:

    var tabs = require("tabs");
    var data = require("self").data;
    tabs.open(data.url('def.htm'));
    
  2. 从“def.htm”获取JSON定义 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函数并将定义传递给它:

  4. 它适用于Jetpack扩展(在Firefox 3.5上),这是代码:

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

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

1 个答案:

答案 0 :(得分: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);
  }
});

但是,如果您真的想要在标签中访问数据 - 附加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);
    });
  }
});