你在后台脚本中可以做些什么,而你在其他js文件中却做不到?

时间:2013-07-20 21:30:01

标签: google-chrome-extension

* 通过其他js文件,我的意思是你在popup.html中包含的文件。 以下代码有效,为什么我应该使用后台脚本?

内容脚本

chrome.extension.onMessage.addListener(
  function(request, sender, sendResponse) {
  //Some code
  }
);

popup.html

中包含的脚本
chrome.tabs.query({active:true,windowId: chrome.windows.WINDOW_ID_CURRENT},
  function(tab) {
    chrome.tabs.sendMessage(tab[0].id, {method: "someMethod"},
    function(response){
      //Some code
    });
  });

1 个答案:

答案 0 :(得分:2)

    只要Chrome浏览器处于活动状态,
  • Background pages就会生效(如果设置了"background"权限,则会更长)。弹出页面仅在徽章的弹出窗口打开时才有效。弹出窗口只能由用户打开。
  • 背景页面的文档永远不可见,而弹出页面在点击徽章按钮时变得可见。

除此之外,背景页面和弹出页面之间没有区别。它们在相同的扩展程序中运行,并且可以访问同一组API。

如果您的扩展程序只需要在弹出窗口处于活动状态时处于活动状态,则不需要背景页面。要保存弹出窗口的状态,只需使用同步localStorage或异步chrome.storage API。当您使用的变量太复杂而无法使用任何API进行存储时,后台页面可能会很有用。

使用背景页面有益的一个例子:
想象一下从服务器下载一个巨大的文本文件的扩展。资源的创建对于服务器来说是非常耗费资源的。从技术上讲,一切都可以在弹出窗口内完成。但是,将任务卸载到后台页面允许用户在下载文件时执行其他任务(如果仅使用弹出窗口,则在用户关闭弹出窗口时下载将停止)。


虽然你没有问,但我想让你知道event pages。它们与背景页面类似,但有一点不同:当扩展空闲时,事件页面会自动关闭。换句话说,事件页面仅处于活动状态when needed!通过这样做,您的扩展将从背景页面的优势中获益,而不会浪费用户的内存。

我的最后一个例子也是必须使用事件页面的完美示例。除了代表弹出窗口执行http请求之外,后台页面什么都不做。如果您使用事件页面而不是背景页面,则可以获得两全其美的效果:可以在不中断下载的情况下关闭弹出页面,扩展名不会浪费内存。

文档