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); 
    }); 
    } 
});