后台页面和后台脚本有什么区别?

时间:2018-07-06 15:06:10

标签: google-chrome-extension

This article使用两个术语“后台页面” “后台脚本”

我想起背景脚本作为Manifest.json中的脚本的 background 字段

但是背景页面是什么?它们之间有何不同?

2 个答案:

答案 0 :(得分:5)

根据documentation

  

后台脚本是扩展程序的事件处理程序;它包含对扩展很重要的浏览器事件的侦听器。它处于休眠状态,直到触发一个事件然后执行指示的逻辑为止。有效的后台脚本仅在需要时才加载,而在空闲时则不加载。

您可以使用persistent清单条目中的background键来配置后台脚本是否一直保持休眠状态直到需要使用或始终处于活动状态。例如:

"background": {
    "persistent": true,
    "scripts": ["myBackground.js"]
}

如果您使用scripts键(如上)声明背景脚本,Chrome将创建一个 HTML页面,其中包含{{1}中包含的脚本script清单条目的}键。因此,在上述情况下,Chrome会创建一个背景页面,例如:

background

如果您声明背景页面,则决定要包含在网页中的内容,并且必须在页面中包含脚本标签,因为您不能同时拥有<html> <head> </head> <body> <script src="myBackground.js"></script> </body> </html> page清单条目中的scripts键。

声明背景页面的主要区别(和优点)是,您可以在其中包含任何想要的HTML元素。它们将不会显示(永远不会显示背景页面),但是它们的工作原理与其他任何页面一样。例如,在以下背景页面中,我添加了一个background标签,用于在扩展程序运行时播放音乐:

manifest.json

audio

myBackgroundPage.html

"background": {
    "persistent": true,
    "page": "myBackgroundPage.html"
}

仅使用脚本并包含类似以下内容即可达到相同的结果:

<html>
    <body>
        <audio id="mySong" src="mySong.mp3" autoplay loop></audio>
        <script src="myBackground.js"></script>
    </body>
</html>

但是在这种情况下,我认为创建自己的背景页面更加方便。

答案 1 :(得分:2)

扩展脚本在页面中运行,而不是在抽象空间中运行,因此后台脚本只是在后台页面中运行的脚本,该页面是一个单独的隐藏页面,带有自己的chrome-extension://或moz-extension:// URL。

当您在manifest.json中声明"background": { "scripts": [....] }时,它会使用script元素有效地创建一个自动虚拟html页面,如 chrome-extension://blabla/_genic_background_page.html 指向您列出的脚本文件。您可以通过inspecting the background page in devtools看到它,它应该是您的主要入门工具。