如何正确地将数据发送到打开的Firefox侧边栏



我正在尝试将数据发送到侧边栏。我看了下面的文档,但我不知道如何在酒吧已经打开的情况下正确地将数据发送到酒吧。

  • 与侧边栏脚本通信
  • 与其他脚本通信
  • 使用端口

我目前的方法是保存侧边栏附加到全局变量中时得到的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;
    }
});

最新更新