Firefox扩展开发

时间:2014-09-24 23:18:58

标签: google-chrome-extension firefox-addon-sdk

在Chrome扩展开发中,我们有背景页面概念。 Firefox Extension Development中是否有类似的功能。在开发Chrome扩展程序时,我看到了类似

的方法

window.Bkg = chrome.extension.getBackgroundPage()。Bkg;

$(function () {
  var view = null;
  if (Bkg.account.isLoggedIn()) {
    view = new Views.Popup();
    $("#content").append(view.render().el);
  } else {
    $("#content").append(Template('logged_out')());
    Bkg.refresh();
  }
}...........

主要逻辑在背景页面中编写(如isLoggedIn等),在Extension Popup页面中我们调用Background页面。这里例如总是加载后台页面来管理会话。我们如何在Firefox扩展开发中具有类似的功能。

1 个答案:

答案 0 :(得分:0)

后台页面(main.js)和内容脚本(弹出脚本)之间的所有通信都是通过事件进行的。您无法立即调用函数,因此您将不会收到任何返回值,但您可以将事件从内容脚本发送到后台脚本,后台将事件发送回内容脚本并调用新函数,如下所示:

main.js partial

// See docs below on how to create a panel/popup
panel.port.on('loggedIn', function(message) {
  panel.port.emit('isLoggedIn', someBoolean);
});
panel.port.on('refresh', function() {
  // do something to refresh the view
});

<强> popup.js

var view = null;
addon.port.on('isLoggedIn', function(someBool) {
  if (someBool) {
    // Obviously not code that's going to work in FF, just want you to know how to structure
    view = new Views.Popup();
    $("#content").append(view.render().el);
  } else {
    $("#content").append(Template('logged_out')());
    addon.port.emit('refresh');
  }
});
addon.port.emit('loggedIn', 'This is a message. I can pass any var along with the event, but I don't have to');

你应该阅读这些内容:

  1. Panel
  2. Communicating between scripts