* 通过其他js文件,我的意思是你在popup.html中包含的文件。 以下代码有效,为什么我应该使用后台脚本?
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) {
//Some code
}
);
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
});
});
此
答案 0 :(得分:2)
除此之外,背景页面和弹出页面之间没有区别。它们在相同的扩展程序中运行,并且可以访问同一组API。
如果您的扩展程序只需要在弹出窗口处于活动状态时处于活动状态,则不需要背景页面。要保存弹出窗口的状态,只需使用同步localStorage
或异步chrome.storage
API。当您使用的变量太复杂而无法使用任何API进行存储时,后台页面可能会很有用。
使用背景页面有益的一个例子:
想象一下从服务器下载一个巨大的文本文件的扩展。资源的创建对于服务器来说是非常耗费资源的。从技术上讲,一切都可以在弹出窗口内完成。但是,将任务卸载到后台页面允许用户在下载文件时执行其他任务(如果仅使用弹出窗口,则在用户关闭弹出窗口时下载将停止)。
虽然你没有问,但我想让你知道event pages。它们与背景页面类似,但有一点不同:当扩展空闲时,事件页面会自动关闭。换句话说,事件页面仅处于活动状态when needed!通过这样做,您的扩展将从背景页面的优势中获益,而不会浪费用户的内存。
我的最后一个例子也是必须使用事件页面的完美示例。除了代表弹出窗口执行http请求之外,后台页面什么都不做。如果您使用事件页面而不是背景页面,则可以获得两全其美的效果:可以在不中断下载的情况下关闭弹出页面,扩展名不会浪费内存。
chrome.browserAction
或chrome.pageAction
API的可选面板,通过在清单文件中声明"default_popup"
键或以编程方式使用{{{ 1}}方法。