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()。それもうまくいかないようです。

アドオンSDKのバージョン1.10を使用しています。

4

2 に答える 2

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 に答える
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 に答える