谷歌浏览器扩展 - 后台脚本

25

在玩弄Chrome扩展程序后,我注意到当你在chrome://extensions页面时,清单文件中启动的后台脚本将运行,而如果你只是浏览互联网或在扩展页面之外的任何其他页面上,后台脚本将不会运行。

这就是我的意思:

在我的清单文件中:

"background": {
    "scripts": ["jquery-latest.js","background.js"]
  },

现在在 background.js 文件中:

$(document).ready(function(){
    alert("working");
});

我使用一个简单的提示函数来测试它是否有效,并发现只有当我在chrome://extension目录下时才会显示alert("working");。如果我转到google.com或类似的网站,就不会有反应。

我的问题是,为什么会出现这种情况?如何更改以便无论在哪里都能弹出提示。


2
我无法重现您所描述的行为。当我安装扩展或从关闭状态重新启动浏览器时,我看到后台脚本仅运行一次。无论我是否查看 chrome://extensions 页面(虽然这是安装扩展所必需的,但它并不会引发该行为),都没有任何区别。 - apsillers
1
如果您刷新chrome://extensions/页面(Ctrl+R或F5),所有扩展程序都将重新加载。这可能是为什么OP观察到了他所描述的行为。 - Rob W
3
我看到了 刷新 页面可以重现这种行为。这似乎是一种非常有帮助的调试快捷方式,谢谢! - apsillers
4个回答

35

那么,与其使用后台脚本,不如将其切换为内容脚本? - David Biga
我仍然有问题,我尝试使用以下代码:"content_scripts": [ { "js": ["jquery-latest.js","background.js"] } ],- 我是否还需要提供matches和css? - David Biga
@DavidBiga matches是必需的(请确保您编写了有效的匹配模式),css是可选的。 - Rob W
太棒了,我明白了。嘿,我正在使用支持所有HTTP的内容,但是否有一种方法可以包括所有类型的网页? - David Biga
1
@DavidBiga <all_urls> 匹配所有支持的模式(http,https,file(如果用户确认),ftp)。 如果您只需要 http 和 https,请使用 *:// * / * - Rob W
1
@DavidBiga 好的,你需要什么...一般来说,避免请求不必要的权限。当你的扩展程序被攻击时,这种不良做法会对你产生负面影响。 - Rob W

4
由于您正在使用背景页,请通过稍微修改manifest.json来使用事件页。尝试添加以下内容:
"background": {
    "scripts": ["jquery-latest.js","background.js"],
    "persistent": false
  },

有关事件页的详细信息,请查看:https://developer.chrome.com/extensions/event_pages


2
效果的产生是因为每当您加载 chrome://extensions 时,它会强制重新加载扩展程序,使用 CTRL+R 可以重现相同的行为。因此,每次背景页都会得到新的重新加载,而在其他页面中则不会发生这种情况。

1
背景脚本是在后台运行的脚本,用于处理大部分内容脚本无法处理的Chrome事件。内容脚本纯粹是每个页面的内容。两者不能相互通信,但是您可以为脚本添加侦听器(例如,chrome.browserAction.addListener(myFunction) 当单击扩展程序屏幕右上角的按钮时执行该函数),以了解是否已按下按钮甚至从后台脚本发送消息到页面控制台。https://youtu.be/ew9ut7ixIlI这个视频为我介绍了背景脚本,但他开始讲述侦听器等方面的部分是在6:30

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接