我有一个使用附加 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"), "");
}
}
})()
});
}