初めての 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 にはこの問題はありません...
私が十分に明確だったことを願っています。これに答えてくれてありがとう:)