2014-09-24 193 views
0

在Chrome扩展开发中,我们有背景页面概念。 Firefox扩展开发中也有类似的东西可用。在开发Chrome扩展的同时,我看到了如下方法:Firefox扩展开发

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等),并从我们呼吁背景页面扩展弹出页面。这里例如总是加载管理会话的背景页面。我们如何在Firefox Extension Development中具有类似的功能。

+0

为了公平起见,这不是写的Chrome扩展程序的好方法。 – Xan 2014-09-25 14:07:58

回答

0

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

main.js局部

// 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