【发布时间】:2014-03-05 08:32:34
【问题描述】:
插件 SDK 将面板附加到小部件,如 here 所示。我想用工具栏按钮使用附加 SDK 来实现相同的效果。
我使用的工具栏按钮是type menu-button,这意味着左侧是一个图标并且有一个oncommand 监听器。右侧是一个下拉箭头,单击时显示其内容。以下是使用附加 SDK 创建此类按钮的代码:
const doc = require('sdk/window/utils').getMostRecentBrowserWindow().document;
var navBar = doc.getElementById('nav-bar')
var btn = doc.createElement('toolbarbutton');
btn.setAttribute('id', 'hylytit');
btn.setAttribute('type', 'menu-button');
btn.setAttribute('class', 'toolbarbutton-1');
btn.setAttribute('image', data.url('resources/hylyt_off.png'));
btn.setAttribute('orient', 'horizontal');
btn.setAttribute('label', 'Hylyt.it');
btn.addEventListener('command', function(event) {
if (event.button===0) btnClick();
console.log(TAG+'button clicked');
}, false);
var panel = doc.createElement('panel');
panel.setAttribute('id', 'search-panel');
panel.addEventListener('command', function(event) {
console.log(TAG+'dropdown clicked');
}, false);
var label = doc.createElement('label');
label.setAttribute('control', 'name');
label.setAttribute('value', 'Article List');
var textbox = doc.createElement('textbox');
textbox.setAttribute('id', 'name');
panel.appendChild(label);
panel.appendChild(textbox);
btn.appendChild(panel);
navBar.appendChild(btn);
上面的panel 不是一个附加的SDK 面板,它是一个XUL panel 并且受到严重限制,因为它不能用CSS 设置样式。最重要的是,尽管btn 的onCommand 按预期触发,但面板的onCommand 侦听器永远不会触发。 XUL 面板会在我单击下拉按钮时显示(只要它有子按钮),但由于我无法访问其单击处理程序,因此我不能仅在单击时创建附加 SDK 面板。
所以我的问题是这样的。有没有办法访问工具栏按钮的菜单部分的点击处理程序,或者有没有办法将附加 SDK 面板附加为工具栏按钮的子项?
【问题讨论】:
标签: javascript firefox-addon firefox-addon-sdk