我想在我的插件中的firefox搜索容器之前添加一个工具栏按钮。但它完全清除了我的导航栏。 我怀疑违规代码是由于一个空数组或其他东西,但我无法确定。
//insert before search container
if(navBar && navBar.currentSet.indexOf("mybutton-id")== -1 )//navBar exist and our button doesnt
{
var arrayCurrentSet= navBar.currentSet.split(',');
var arrayFinalSet= [];//empty at first
if(arrayCurrentSet.indexOf("search-container") != -1)//if search-container exists in current set
{
// check item by item in current set
var i= null;
while(i=arrayCurrentSet.shift() != undefined)
{
if(i == "search-container")//"search-container" found !!
{
/*insert our button after it but only if our button does not already exist*/
if(arrayFinalSet.indexOf("mybutton-id") == -1) arrayFinalSet.push("mybutton-id");
}
arrayFinalSet.push(i);
dump("arrayFinalSet "+ i);
}
}
else //damn search-container doesnt exist
{
arrayFinalSet= arrayCurrentSet;
arrayFinalSet.push("mybutton-id");//add our button to the end of whatever is available in nav bar
}
//set new navBar
navBar.currentSet= arrayFinalSet.join(',');
}
完整的代码可用
答案 0 :(得分:2)
我不太清楚为什么导航栏已被移除,但我认为从不同角度处理这个问题会更好。不要乱用字符串数组,而是尝试使用DOM方法。
e.g。
var sC=navBar.querySelector("#search-container");
navBar.insertBefore(btn, sC);
答案 1 :(得分:2)
你在这里的代码似乎工作 - 但工具栏需要以某种方式找到你的按钮。您当前的代码甚至没有将按钮插入到文档中,这意味着工具栏无法通过其ID找到它。它应该在工具栏调色板中,但是,调色板还确定用户在自定义工具栏时可以选择的按钮。所以你可能想先做这样的事情:
var toolbox = navBar.toolbox;
toolbox.palette.appendChild(btn);
您可能还想简化代码:
var arrayCurrentSet = navBar.currentSet.split(',');
var insertionPoint = arrayCurrentSet.indexOf("search-container");
if (insertionPoint >= 0)
arrayCurrentSet.splice(insertionPoint, 0, "mybutton-id");
else
arrayCurrentSet.push("mybutton-id");
navBar.currentSet = arrayCurrentSet.join(',');
最后,您可能希望让浏览器记住当前的按钮设置,它不会自动发生:
document.persist(navBar.id, "currentset");
请注意的是将被插入到工具栏按钮是不一样的,你添加到调色板中的按钮 - 所述工具栏代码克隆按钮,与被留在调色板一个副本。因此,通过addEventListener
添加的事件监听器将遗憾地丢失。最好使用command
attribute并在您将附加听众的文档中插入<command>
element。
注的:在XUL通常希望command
,而不是click
事件 - 除非你是在只有鼠标点击真正感兴趣,并希望忽略按钮被触发通过键盘或其他方式。