我有一个Firefox扩展,它添加了一个带有面板的工具栏Widget,该面板应该在单击小部件时显示。在某些情况下,单击工具栏小部件时,面板不应显示。
我正在实例化工具栏和面板:
var popup = panel.Panel({
width: 310,
height: 400,
contentURL: self.data.url('panel.html'),
contentScriptFile: self.data.url('panel.js'),
// NOTE: You can't use the contentStyleFile option here.
});
var toolbarOptions = {
id: 'someid',
label: 'Some Label',
contentURL: self.data.url('icon-16.png'),
panel: popup
};
// There doesn't seem to be a way to remove the toolbar in PB mode.
var toolbar = widgets.Widget(toolbarOptions);
如何从窗口小部件单击处理程序中取消面板打开?无论我在那里写什么逻辑,似乎总是打开。
toolbar.on('click', function() {
if (dontShowPanel()){
// I want to somehow cancel the panel opening at this point.
} else {
panel.show();
}
});
我尝试过点击处理中的return false;
似乎不起作用。我也试过打电话给panel.hide()
。这似乎也不起作用。
我正在使用附加SDK的1.10版本。
答案 0 :(得分:1)
创建窗口小部件时,需要将面板实例添加为属性:
var panel = require("panel").Panel({
width: 250,
height: 250,
contentURL: data.url('panel.html')
});
require("widget").Widget({
id: 'id',
label: 'my-label',
contentURL: data.url('http://www.mozilla.org/favicon.ico'),
panel: panel
});
更新:抱歉,我不明白整个问题。据我所知,没有办法有条件地阻止基于点击事件显示面板,以保持锚定的方式。
答案 1 :(得分:1)
在面板显示之前调用您的click
事件处理程序,这意味着您仍然可以在此时更改面板。但是,一些不明显的事情:更改Widget
对象的面板不会立即生效,您需要为WidgetView
对象更改它(特定浏览器窗口中的窗口小部件实例) )。该对象作为参数传递给click
事件处理程序。所以你的工具栏选项可能如下所示:
var toolbarOptions = {
id: 'someid',
label: 'Some Label',
contentURL: self.data.url('icon-16.png'),
onClick: function(view) {
if (dontShowPanel()){
view.panel = null;
} else {
view.panel = popup;
}
}
};