javascript锚点面板+小部件,firefox附加组件

时间:2012-01-31 20:52:39

标签: javascript jquery firefox-addon panel firefox-addon-sdk

我是一个开发firefox附加组件的菜鸟。我已经能够成功地将一个面板(直到它中断)锚定到我的小部件。锚定面板充当各种菜单。我被困的地方是:我希望能够通过我的锚点面板中的一个“菜单”项目调用另一个面板来显示。我该怎么做呢?菜单面板和列表面板的脚本目前都位于main.js。

以下是菜单面板的代码:

var menuList = panels.Panel({
  width: 102,
  height: 90,
  contentURL: data.url('list/menu-list.html'),    
});

以下是列表面板的代码:

 var historyList = panels.Panel({
   width: 600,
   height: 300,
   contentURL: data.url('list/history-list.html'),
   contentScriptFile: [data.url('jquery-1.7.1.js'),
                   data.url('list/history-list.js')],
   contentScriptWhen: 'ready',
   onShow: function() {
  this.postMessage(simpleStorage.storage.famhistory);
   },
   onMessage: function(message) {
      require('tabs').open(message);
   }
 });

在我的菜单panel.html中,我有一个链接:

<a href="javascript:showpanel('famlist')">show family list</a>

和标题中的脚本:

function showpanel(option)  {
 this.historyList.show();
};

任何帮助都将受到高度赞赏! 谢谢!

1 个答案:

答案 0 :(得分:1)

面板中的JavaScript代码无权执行任何操作 - 它无法打开新面板,也无法与扩展程序通信。您需要将一个内容脚本注入此面板,该脚本将与扩展进行通信,如下所示:

var menuList = panels.Panel({
  width: 102,
  height: 90,
  contentURL: data.url('list/menu-list.html'),
  contentScriptFile: [data.url('jquery-1.7.1.js'),
                      data.url('list/menu-list.js')],
  onMessage: function(message) {
    if (message == "famlist")
      historyList.show();
  }
});

内容脚本menu-list.js需要收听链接点击,并在必要时向扩展程序发送消息,如下所示:

$(document).ready(function() {
  $("#famlistLink").click(function() {
    self.postMessage("famlist");
  });
});