我正在使用SDK教程网站中的代码:
var sidebar = require("sdk/ui/sidebar").Sidebar({
id: 'my-sidebar',
title: 'My Sidebar',
url: require("sdk/self").data.url("sidebar.html"),
onAttach: function (worker) {
// listen for a "ready" message from the script
worker.port.on("ready", function() {
// send an "init" message to the script
worker.port.emit("init", "message from main.js");
});
}
});
这很有效。现在的问题是,这只允许我通过work.port onAttach发送一些东西(以及侧栏上的3个其他事件)。 我需要的是使用此侧栏范围之外的emit函数。例如,如果我在同一个main.js中使用像
这样的标签的监听器tabs.on('ready', function(tab) {
sidebar.worker.port.emit("init", "message from main.js");
}
这不起作用。我也试过
sidebar.port.emit("init", "message from main.js");
或
worker.port.emit("init", "message from main.js");
没有成功。
我还尝试将标签监听器放在侧边栏的onAttach中(所以监听器内的监听器),但这也无效。
有人对此有所了解吗? 感谢。
答案 0 :(得分:5)
Use the method described here:
var workers = [];
function detachWorker(worker, workerArray) {
var index = workerArray.indexOf(worker);
if(index != -1) {
workerArray.splice(index, 1);
}
}
var sidebar = require("sdk/ui/sidebar").Sidebar({
...
onAttach: function(worker) {
workers.push(worker);
worker.on('detach', function () {
detachWorker(this, workers);
});
}
});
然后在打开的侧边栏上发出:
workers.forEach(worker => {
worker.port.emit('some-message', data);
})