在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扩展开发中具有类似的功能。
答案 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');
你应该阅读这些内容: