0

我有一个 Firefox 扩展,它添加了一个带有面板的工具栏小部件,该面板应在单击小部件时显示。在某些情况下,单击工具栏小部件时面板不应显示。

我正在实例化工具栏和面板,如下所示:

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()。这似乎也不起作用。

我正在使用 1.10 版的附加 SDK。

4

2 回答 2

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;
    }
  }
};
于 2012-10-16T07:43:08.587 回答
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
});

更新:对不起,我不明白整个问题。据我所知,没有办法有条件地阻止基于点击事件显示面板,以保留锚定。

于 2012-10-16T00:25:20.947 回答