我正在尝试将数据发送到侧边栏。我看了下面的文档,但我不知道如何在酒吧已经打开的情况下正确地将数据发送到酒吧。
- 与侧边栏脚本通信
- 与其他脚本通信
- 使用端口
我目前的方法是保存侧边栏附加到全局变量中时得到的worker
对象,但我相信还有更好的方法。展示我当前方法的最小示例:
var BARWORKER = undefined;
require("sdk/ui/sidebar").Sidebar({
id: "mybar",
url: "./sidebar.html",
onReady: function (worker) {
BARWORKER = worker;
}
});
// lots of code
if (BARWORKER) {
BARWORKER.port.emit("message", payload);
}
// lots of code
要在侧边栏已经打开时将数据发送到侧边栏,还可以使用可见性API。
https://developer.mozilla.org/en-US/docs/DOM/Using_the_Page_Visibility_API
function onVisibilityChange() {
if(!document.hidden){}
}
document.addEventListener("visibilitychange", onVisibilityChange);
我当前的解决方案是给侧边栏一个字段来保存当前的worker
对象。在分离侧边栏时,它被设置为undefined
。这作为一个中间解决方案非常有效。我有一种感觉,最好的方法是涉及自定义事件,但我还没有找到如何在这种特定情况下使用自定义事件。
var BAR = require("sdk/ui/sidebar").Sidebar({
id: "mybar",
url: "./sidebar.html",
worker: undefined,
onReady: function (worker) {
BAR.worker = worker;
},
onDetach: function () {
BAR.worker = undefined;
}
});