假设我有一个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
之间共享功能(不将整个功能复制到每个功能中)?
答案 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 documentation和event pages docs(解释popup.js
已弃用)。