1

初めての Firefox 拡張機能を開発しているので、メニューボタン要素とメニュー項目を作成しました。FireBug ボタンとまったく同じように、メイン ボタンをクリックしたときだけでなく、メニュー項目をクリックしたときにもイベントがトリガーされるようにしたいと考えています。問題は、メイン ボタンの横にある矢印をクリックしてメニュー項目を表示すると、メイン イベントがトリガーされることです。だから私の質問は:

メイン ボタン (メニュー ボタン) とメニューを表示する矢印を区別するにはどうすればよいですか?

ボタンを生成するコードは次のとおりです。

function addToolbarButton() {
var document = mediator.getMostRecentWindow('navigator:browser').document;      
var navBar = document.getElementById('nav-bar');
if (!navBar) {
    return;
};

//main button
var btn = document.createElement('toolbarbutton');  
btn.setAttribute('id', 'reportButton'); 
btn.setAttribute('type', 'menu-button');  
btn.setAttribute('class', 'toolbarbutton-1'); 
btn.setAttribute('image', data.url('img/BookmarkKitchen.png'));
btn.setAttribute('orient', 'horizontal');
btn.setAttribute('label', 'Report');
btn.addEventListener('click', function() {
    console.log("this=" + this.id); 
    event.stopPropagation();
    }
, false);


//menu popup
var menupopup = document.createElement('menupopup');
menupopup.setAttribute('id', 'menupopup');
menupopup.addEventListener('click', function(event) {
    console.log("this=" + this.id);   
    event.stopPropagation();
}
, false);

//menu items
var menuitem1 = document.createElement('menuitem');
menuitem1.setAttribute('id', 'menuitem1');
menuitem1.setAttribute('label', 'Test1');
menuitem1.setAttribute('class', 'menuitem-iconic');
menuitem1.addEventListener('click', function(event) {
    console.log("this=" + this.id);  
    event.stopPropagation();
}
, false);


menupopup.appendChild(menuitem1);
btn.appendChild(menupopup);
navBar.appendChild(btn);



}

メイン ボタンをクリックすると、コンソールに「this=reportButton」と表示されます。これは正常ですが、メイン ボタンの横にある矢印をクリックすると、コンソールにも「this=reportButton」と表示されます。つまり、メニューにアクセスしたい場合、メイン イベントがトリガーされます。これを防ぐために私が見つけた唯一の方法は、矢印のボタンを押して、メニューが表示されるのを待って、メニュー項目で離すことです。これはあまりユーザーフレンドリーではなく、Firebug にはこの問題はありません...

私が十分に明確だったことを願っています。これに答えてくれてありがとう:)

4

1 に答える 1

1

イベントを使用しないでくださいclick。XUL では、実際にはマウス クリックを意味します。そのため、ユーザーが他の手段 (キーボードなど) でボタンをトリガーした場合、clickイベントはトリガーされません。代わりにイベントを使用する必要commandがあります。また、ドロップダウン矢印をクリックしてもイベントが発生しないという利点もあります。

于 2012-07-13T20:11:57.940 に答える