Chrome扩展程序js:在background.js和popup.js之间共享功能

时间:2014-03-29 23:53:43

标签: javascript google-chrome-extension

假设我有一个JavaScript函数foo()我想在后台和popup.html执行。

例如:它在Chrome扩展程序的后台每小时执行一次,但用户也可以通过弹出菜单(popup.html)点击按钮来激活它。

我目前有一个定义global.js的{​​{1}}脚本,当我在foo()文档中包含对foo()的调用时,它们会毫无问题地执行。 (如果我在popup.js)中包含两个脚本

但是,当我尝试访问popup.html内的foo()时,调用不会执行(即使background.js包含在“background”“manifest.json”扩展文件中:

global.js

是否有方便的方法在"background": { "persistent": true, "scripts": ["background.js", "global.js"] }, background.js之间共享功能(不将整个功能复制到每个功能中)?

2 个答案:

答案 0 :(得分:17)

后台脚本按清单文件中指定的顺序加载。只需在后台脚本之前使用通用代码加载文件,如下所示:

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

您也可以使用弹出窗口中的chrome.extension.getBackgroundPage()来访问background page的函数/变量,而不是复制弹出窗口中的代码。 chrome.extension.getBackgroundPage().myFunction();

答案 1 :(得分:1)

除了在background的{​​{1}}部分添加脚本之外,您还必须通过manifest.json API(目前为{{}访问这些脚本中的内容1}})。

例如,在chrome.runtime.getBackgroundPage(callback)或您的扩展程序的其他位置:

preferred to chrome.extension.getBackgroundPage()

有关详细信息,请参阅getBackgroundPage documentationevent pages docs(解释popup.js已弃用)。