[英]how to convert firefox jetpack extension -> to firefox addon sdk extension
我正在使用Add-on Builder Beta(Firefox),並且正在嘗試執行以下操作:
(Addon Builder中有3個部分:庫,數據,庫)
從數據部分獲取“ def.htm”文件,並在新標簽頁中打開它,方法是:
var tabs = require("tabs"); var data = require("self").data; tabs.open(data.url('def.htm'));
從“ 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>
調用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.