SDK を使用して Firefox アドオンを作成しようとしていますが、js スクリプトを通信させる方法がわかりません。目標は、選択したときにアクティブなタブの特定の要素を非表示/表示できる3つのチェックボックスがある魔女のフォームを持つパネルを作成することです。
スクリプトは次のとおりです。
var data = require("sdk/self").data;
var painel1 = require("sdk/panel").Panel({
width: 215,
height: 160,
contentURL: data.url("painelDestroyer.html"),
contentScriptFile: [data.url("jquery.js"),data.url("panel.js")]
});
require("sdk/widget").Widget({
id: "open-form-btn",
label: "Clear",
contentURL: data.url("mozico.png"),
panel: painel1
});
// Attach a content script to the current active tab
let worker = require("sdk/tabs").activeTab.attach({
contentScriptFile: data.url("clear.js")
});
painel1.port.on("show-tag",function(tag){
worker.port.emit("show-tag", {tag:tag});
console.log("worker emited");
});
painel1.port.on("hide-tag",function(tag){
worker.port.emit("clear-tag", {tag:tag});
console.log("worker emited");
});
ペインエル.js:
$("#imgD").click(function() {
if ($(this).is(":checked")) {
panel.port.emit("clear-tag","img");
console.log("panel emited");
} else {
panel.port.emit("show-tag","img");
console.log("panel emited");
}
});
$("#aD").click(function() {
if ($(this).is(":checked")) {
panel.port.emit("clear-tag","a");
console.log("panel emited");
} else {
panel.port.emit("show-tag","a");
console.log("panel emited");
}
});
$("#iframeD").click(function() {
if ($(this).is(":checked")) {
panel.port.emit("clear-tag","iframe");
console.log("panel emited");
} else {
panel.port.emit("show-tag","iframe");
console.log("panel emited");
}
});
clear.js:
function tagHide (tag, hide) {
$(tag).each(function() {
if (hide === false) {
$(this).css({
"visibility": "visible"
});
} else {
$(this).css({
"visibility": "hidden"
});
}
});
}
self.port.on('show-tag', function(tag) {
tagHide(tag, false);
});
self.port.on('clear-tag', function(tag) {
tagHide(tag, true);
});
質問: この作業を行うにはどうすればよいですか? この 3 つのスクリプト間で通信するにはどうすればよいですか? 私の推測では、painel.js から main.js に、次に clean.js にメッセージを送信する必要がありますが、どうすればよいでしょうか? clean.js または painel.js でメッセージを受信するにはどうすればよいですか? 私は、painel.js に self.port が存在しないことを知り続けています。