3

我有一个使用附加 SDK 制作的 Firefox 插件。

https://addons.mozilla.org/es/firefox/addon/board-notes/

要添加工具栏按钮,我使用 SDK 的工具栏按钮.js 的流行库:

https://github.com/erikvold/toolbarbutton-jplib/blob/master/lib/toolbarbutton.js

我只想在第一次安装时添加图标并且它可以工作,图标出现但重新启动浏览器后图标消失。用户必须使用右键单击按钮打开设置浏览器栏并将图标再次拖到栏上。然后,如果他重新启动图标继续正确地在其位置。

我想修复此行为,因为大多数用户可能不知道他们可以使用设置选项恢复图标。

我已经测试了一些功能来检测图标是否不在他可以再次移动的位置,但是如果用户隐藏了图标,那么当他重新启动时它会再次出现。这是 Firefox 政策所禁止的。

我会很感激任何帮助,我快疯了。

我使用的代码是这样的:

 button = createButton(options);

 if (options.loadReason == "install")
 {
    button.moveTo({
       toolbarID: "nav-bar",
       insertbefore: "home-button"
    });
 }

 function createButton(options) {
   return toolbarbutton.ToolbarButton({
     id: "NoteBoard",
     label: "Note Board",
     tooltiptext: "Note Board",
     image: data.url("noteboardMini.png"),
     onCommand: function() {
         openPopup();
     },
     onContext: (function () {
       var installed = false;
       return function (e, menupopup, _menuitem) {
       //Install command event listener
         if (!installed) {
            menupopup.addEventListener("command", function (e) {
               var link = e.originalTarget.value;
               if (link) open(link.replace(/\?.*/ , ""));
            });
            installed = true;
         }
         var temp = (function (arr) {
            arr.forEach(function (item, index) {
               for (var i = index + 1; i < arr.length; i++) {
                  if (arr[i] && item.label == arr[i].label) {delete arr[index]}
               }
            });

         return arr.filter(function (item){return item});
    })(loggedins);
    //remove old items
     while (menupopup.firstChild) {
      menupopup.removeChild(menupopup.firstChild)
     }
     function addChild (label, value) {
      var item = _menuitem.cloneNode(true);
      item.setAttribute("label", label);
      item.setAttribute("value", value);
      menupopup.appendChild(item);
    }
    if (temp.length) {
      temp.forEach(function (obj) {
        addChild(obj.label, obj.link);
      });
    }
    else {
      addChild(_("context"), "");
    }
  }
 })()
 });
}
4

1 回答 1

2

您可以使用库Toolbar Button Complete,它是我的toolbarbutton.js 的分支。

使用图书馆

你可以像原来的toolbarbutton.js一样使用这个库,但它也有更多的选项和特性。

在您的 main.js 文件中:

button = createButton(options);

// On install moves button into the toolbar
if (options.loadReason == "install") {
    button.moveTo({
        toolbarID: "nav-bar",
        insertbefore: "home-button",
        forceMove: true 
    });
};

您可以在此处找到该库的工作示例,但它有点过时了。

安装库

如果您在计算机上使用附加 SDK:

  1. github.com下载工具栏按钮完成
  2. 将其添加到您的packages目录中。(在您的 SDK 目录下或在您的插件目录下。)

如果您使用Add-on Builder来创建您的插件

  1. 单击库文件夹旁边的加号按钮:

    加号按钮。

  2. 输入Toolbar Button Complete.
  3. 单击添加库按钮:

    添加库按钮

更新库

该库托管在github.com

如果您使用Add-on Builder作为您的附加组件,您只需在有可用更新时单击小刷新按钮。

于 2013-06-20T01:54:23.267 回答