8

我创建了一个包含工具栏按钮的 Firefox 扩展。如何设置它,以便在安装我的扩展程序时,该按钮会自动出现在主工具栏中。我不希望我的用户必须转到自定义工具栏菜单并将我的按钮拖过来。

4

4 回答 4

8

来自https://developer.mozilla.org/En/Code_snippets:Toolbar#Adding_button_by_default --

当您创建和部署扩展并通过覆盖自定义工具栏选项板为其包含工具栏按钮时,默认情况下它不可用。用户必须将其拖到工具栏上。以下代码将默认将您的按钮放在工具栏上。这应该只在安装后第一次运行您的插件时完成,这样如果用户决定删除您的按钮,它就不会在每次启动应用程序时再次出现。

笔记

默认情况下仅插入一次按钮,在首次运行时或在扩展更新添加新按钮时。

请仅在默认情况下添加您的按钮,如果它为用户增加了真正的价值,并且将成为您的扩展的频繁入口点。

您不得在以下任何元素之间插入工具栏按钮:组合后退/前进按钮、位置栏、停止按钮或重新加载按钮。这些元素在彼此相邻放置时具有特殊行为,如果被另一个元素分开,则会中断。

/**
 * Installs the toolbar button with the given ID into the given
 * toolbar, if it is not already present in the document.
 *
 * @param {string} toolbarId The ID of the toolbar to install to.
 * @param {string} id The ID of the button to install.
 * @param {string} afterId The ID of the element to insert after. @optional
 */
function installButton(toolbarId, id, afterId) {
    if (!document.getElementById(id)) {
        var toolbar = document.getElementById(toolbarId);

        // If no afterId is given, then append the item to the toolbar
        var before = null;
        if (afterId) {
            let elem = document.getElementById(afterId);
            if (elem && elem.parentNode == toolbar)
                before = elem.nextElementSibling;
        }

        toolbar.insertItem(id, before);
        toolbar.setAttribute("currentset", toolbar.currentSet);
        document.persist(toolbar.id, "currentset");

        if (toolbarId == "addon-bar")
            toolbar.collapsed = false;
    }
}

if (firstRun) {
    installButton("nav-bar", "my-extension-navbar-button");
    // The "addon-bar" is available since Firefox 4
    installButton("addon-bar", "my-extension-addon-bar-button");
}
于 2009-02-24T01:33:16.133 回答
1

我们正在使用以下代码....

function init() {

    // .... 

    var navbar = document.getElementById("nav-bar");
    if ((myExtensionShared.checkMyBtnInstalled() == false) &&
        (navbar != null && document.getElementById("myExtension-button") == null)) {
        var newset;
            if (navbar.getAttribute('currentset') && 
              navbar.getAttribute('currentset').indexOf('myExtension-button') == -1) {

                navbar.insertItem ('myExtension-button', null, null, false);
                newset = navbar.getAttribute('currentset') + ',myExtension-button';
                navbar.setAttribute('currentset', newset);
                document.persist('nav-bar', 'currentset');
            }
            else if (!navbar.getAttribute('currentset')) {

                navbar.insertItem ('myExtension-button', null, null, false);
                newset=navbar.getAttribute('defaultset') + ',myExtension-button';
                navbar.setAttribute('currentset', newset);
                document.persist('nav-bar', 'currentset');
            }

    }

    // .... 

}



myExtensionShared.prototype.checkMyBtnInstalled = function() {
    var prefs = Components.classes["@mozilla.org/preferences-service;1"]
                                       .getService(Components.interfaces.nsIPrefBranch);
    var btnInstalled = false;
    if (prefs.prefHasUserValue("extensions.myExtension.myBtnInstalled")) {
        btnInstalled = prefs.getBoolPref("extensions.myExtension.myBtnInstalled");
    }
    if (!btnInstalled) {
        prefs.setBoolPref("extensions.myExtension.myBtnInstalled", true);
    }
    return btnInstalled;
}
于 2009-02-24T02:42:06.000 回答
0

这是我编写的一个小脚本片段,它在您的扩展程序第一次运行时向 Firefox 工具栏添加一个按钮:在首次运行时将您的扩展程序的工具栏按钮添加到 Firefox

于 2011-11-19T17:50:47.010 回答
0

我们正在使用以下代码来附加按钮(如果已经存在于栏中的其他位置)。

//...
appendButtonInToolbar:function(buttonId, toolbarId) {
    var toolbar = document.getElementById(toolbarId);
    var button = document.getElementById(buttonId);
    if(button) {
        var parentBar = button.parentNode;          
        if(parentBar && parentBar != toolbar) {
            var newset = this.removeButtonFromToolbarCurrentSet(parentBar,buttonId);              
        }
        toolbar.appendChild(button);
    }else{          
        toolbar.insertItem(buttonId);
    }

    this.appendButtonInToolbarCurrentSet(toolbar,buttonId);
},

appendButtonInToolbarCurrentSet:function(toolbar, buttonId) {
    var oldset = toolbar.getAttribute("currentset");
    var newset = "";
    if(oldset && oldset!="") {
        newset = oldset + ",";
    }        
    newset += buttonId;        
    toolbar.setAttribute("currentset", newset);
    document.persist(toolbar.id,"currentset");
    return newset;
},


removeButtonFromToolbarCurrentSet:function(toolbar, buttonId) {
    var oldset = toolbar.getAttribute("currentset");
    if(!oldset || oldset=="" || oldset.indexOf(buttonId) == -1) return oldset;
    var reg = new RegExp(buttonId+",?", "gi");        
    var newset = oldset.replace(reg,"");
    if (newset.charAt(newset.length-1) == ",") {
       newset = newset.substring(0, newset.length - 1);
    }

    toolbar.setAttribute("currentset", newset);
    document.persist(toolbar.id,"currentset");
    return newset;
}, 
//...
于 2009-05-28T15:28:09.277 回答