簡體   English   中英

如何將firefox jetpack擴展名->轉換為firefox addon sdk擴展名

[英]how to convert firefox jetpack extension -> to firefox addon sdk extension

我正在使用Add-on Builder Beta(Firefox),並且正在嘗試執行以下操作:

(Addon Builder中有3個部分:庫,數據,庫)

  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函數並將定義傳遞給它:

它可以與Jetpack擴展一起使用(在Firefox 3.5上),下面是代碼:

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

    dowork (def); 
});

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

那是一種相當奇怪的方法,為什么要嘗試以這種復雜的方式獲取JSON數據? 如何將其放入文件data/definition.json (然后正確編碼):

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

並使用request將其讀出:

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將內容腳本注入此頁面,然后將數據發送回擴展名。 遵循以下原則:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM