Firefox插件工具栏按钮在首次运行后消失

时间:2013-06-17 10:28:37

标签: firefox firefox-addon javascript firefox-addon-sdk

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

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

要添加工具栏按钮,我使用SDK toolbarbutton.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"), "");
    }
  }
 })()
 });
}

1 个答案:

答案 0 :(得分: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 
    });
};

您可以找到图书馆here的工作示例,但它有点过时了。

安装库

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

  1. Toolbar Button Complete下载github.com
  2. 将其添加到您的packages目录中。 (在您的SDK目录下或您的附加组件目录下。)
  3. 如果您使用Add-on Builder创建附加组件

    1. 点击图书馆文件夹旁边的加号按钮:

      The plus button.

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

      Add Library Button

    4. 更新库

      图书馆托管在github.com here

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