自动将toolbarbutton安装到firefox导航栏,而不是使用insertItem

时间:2012-03-08 22:57:51

标签: javascript firefox firefox-addon

所以我已经阅读了我在MDN,stackoverflow等上可以找到的所有内容,而这一切似乎都已过时和/或无法正常工作。这是问题所在:

我想在安装时自动将扩展程序的“toolbarbutton”放在导航栏上,类似于Chrome。用户在该点之后所做的事情取决于他们,尽管如果您移除按钮(使用此特定扩展名),您也可以删除扩展名,因为没有按钮它是无用的。总之...

这样做似乎有两种方法。您可以将其附加到“currentSet”并使其保持不变,如下所示:

var currentset = document.getElementById("nav-bar").currentSet;
currentset=currentset + ",MYBUTTON_ID";
document.getElementById("nav-bar").setAttribute("currentset",currentset);
document.getElementById("nav-bar").currentSet = currentset;
document.persist("nav-bar","currentset");

或者,您可以像这样使用“insertItem”:

var toolbar = document.getElementById("nav-bar");
toolbar.insertItem("MYBUTTON_ID", null);  
toolbar.setAttribute("currentset", toolbar.currentSet);  
document.persist(toolbar.id, "currentset");

现在,如果我使用第一种方法,它可以工作,但由于某种原因,它会完全删除导航栏上的所有其他内容。当它覆盖它时,“currentSet”似乎没有其他导航栏按钮,所以我最终得到了默认的导航栏和我的图标。擦除用户的所有其他按钮是不行的......

第二个选项不会消除其他选项,但无论出于何种原因,“insertItem”这样做的方式根本不起作用。我的按钮永远不会出现在导航栏中,期间。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

好吧,就像我想的那样,我的代码没有任何问题,问题就像我描述的那样。

加载扩展程序并执行安装按钮的脚本时,过早完成。在执行时,“currentSet”仅包含默认按钮。尚未加载其他扩展按钮。因此,如果您修改currentSet并保存(保留)它,则会清除所有其他按钮。

解决方案(对我而言)是强制我的“安装”脚本等待更长时间。我发现一旦页面被加载,所有其他按钮都有足够的时间出现。所以,我只是这样做了:

function installButton() {

    var navbar = document.getElementById("nav-bar");
    var newset = navbar.currentSet + ",MYBUTTONID";
    navbar.currentSet = newset;
    navbar.setAttribute("currentset", newset );
    document.persist("nav-bar", "currentset");

}

window.addEventListener("load", function () { installButton(); }, false);

答案 1 :(得分:0)

我使用此代码在navbar中添加工具栏按钮,但这仅适用于全新安装,而不适用于下次安装,即升级插件,因为用户可以移动/拖动图标到不同的位置。因此,您需要在新的firefox profile中尝试此操作。这是代码:

//plcae toolbar icon
var navbar = document.getElementById("nav-bar");
var newset = navbar.currentSet + ",MYBUTTON_ID";
navbar.currentSet = newset;
navbar.setAttribute("currentset", newset );
document.persist("nav-bar", "currentset"); 


这是XUL Overlay的代码:

<toolbarpalette id="BrowserToolbarPalette">
<toolbarbutton id="MYBUTTON_ID" inserbefore="searchBar" class="toolbarbutton-1 chromeclass-toolbar-additional"
    label="MYBUTTON_ID" tooltiptext="MYBUTTON_ID"
    onclick="MYBUTTON_ID()"/>
</toolbarpalette>

你可以强制图标显示在导航栏中,对抗用户意愿,这将在每次firefox重启后生效,但不推荐

var navbar = document.getElementById("nav-bar");

    var newset = navbar.currentSet;
    if (newset.indexOf("MYBUTTON_ID") == -1)
    {
        if (newset.indexOf("reload-button,stop-button,") > -1)
            newset = newset.replace("reload-button,stop-button,", "reload-button,stop-button,MYBUTTON_ID,");
        else
            newset = newset + ",MYBUTTON_ID";
        navbar.currentSet = newset;
        navbar.setAttribute("currentset", newset );
        document.persist("nav-bar", "currentset"); 
    }