1

アドオンの 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(',');  
}

完全なコードが利用可能です

https://builder.addons.mozilla.org/addon/1052494/latest/

http://jsfiddle.net/CQ4wA/

4

2 に答える 2

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");

ツールバーに挿入されるボタンは、パレットに追加したボタンと同じではないことに注意してください。ツールバー コードはボタンを複製し、1 つのコピーがパレットに残ります。したがって、経由で追加されたイベントリスナーaddEventListenerは残念ながら失われます。command属性を使用して、リスナーをアタッチするドキュメントに<command>要素を挿入することをお勧めします。

: XULでは、マウス クリックのみに本当に関心があり、キーボードやその他の手段によってトリガーされるボタンを無視したい場合を除き、通常commandはイベントではなく が必要です。click

于 2012-05-14T08:58:30.823 に答える
2

ナビゲーション バーが削除された理由はよくわかりませんが、これについては別の角度からアプローチしたほうがよいと思います。文字列の配列をいじるのではなく、代わりに DOM メソッドを使用してみてください。

例えば

var sC=navBar.querySelector("#search-container");
navBar.insertBefore(btn, sC);
于 2012-05-13T23:10:20.907 に答える