0

*其他 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
    });
  });

4

1 回答 1

2
  • 只要 Chrome 浏览器处于活动状态,后台页面就会存在(如果设置了“后台”权限,则甚至更长)。弹出页面仅在徽章的弹出窗口打开时才处于活动状态。弹出窗口只能由用户打开。
  • 背景页面的文档永远不可见,而弹出页面在单击徽章按钮时变得可见。

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

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

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


虽然您没有问,但我想让您了解活动页面。它们与后台页面类似,但有一个区别:当分机空闲时,事件页面会自动关闭。换句话说,事件页面仅在需要时才处于活动状态!通过这样做,您的扩展程序将受益于后台页面的优势,而不会不必要地浪费用户的内存。

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

文档

于 2013-07-20T22:36:28.657 回答