Ole*_*leg 12 javascript code-reuse google-chrome google-chrome-extension
比方说,我有一个功能:
var rand = function(n) {
return Math.floor(Math.random() * n);
}
Run Code Online (Sandbox Code Playgroud)
我可以在没有copypaste的内容脚本和后台脚本中使用此功能吗?
谢谢.
Lio*_*ior 21
是.您可以拥有一个外部JS文件,该文件作为后台和内容脚本(与任何普通的JS文件一样)的一部分加载.只需将其添加到清单中的后台和内容脚本文件数组中,它就会为您加载.
例如,如果我们的共享函数驻留在sharedFunctions.js,使用它们的内容脚本在mainContentScript.js,并且后台代码mainBackground.js(在js子文件夹中的所有内容)我们可以在清单中执行以下操作:
"background": {
"scripts": [ "js/sharedFunctions.js", "js/mainBackground.js" ]
},
"content_scripts": [
{
"matches": ["*://*/*"],
"js": ["js/sharedFunctions.js", "js/mainContentScript.js"]
}
]
Run Code Online (Sandbox Code Playgroud)
注意:确保在使用它的其他文件之前按正确的顺序加载它.
或者您也可以在background.html中将其添加为脚本标记(带有相对URL),并且只在清单中将其添加到内容脚本的JS数组中.所以清单看起来像:
"background": {
"page": "background.html"
},
"content_scripts": [
{
"matches": ["*://*/*"],
"js": ["js/sharedFunctions.js", "js/mainContentScript.js"]
}
]
Run Code Online (Sandbox Code Playgroud)
并且background.html文件将具有以下脚本标记:
<script type="text/javascript" src="js/sharedFunctions.js"></script>
Run Code Online (Sandbox Code Playgroud)
编辑:此外,与扩展的其他部分中的其他范围共享(遗憾的是,在内容脚本中不可用).
您还可以将要共享的功能驻留在后台脚本中并通过chrome.runtime.getBackgroundPage()它们访问它们,您可以在此处阅读更多信息:https:
//developer.chrome.com/extensions/runtime#method-getBackgroundPage
所以,假设您rand()在后台脚本中将您的函数声明为全局变量(这意味着它是背景窗口对象上的属性),您可以在另一个范围内的脚本开头做这种事情(这可以是像browserAction窗口一样的弹出上下文):
var background, newRandomNumber;
chrome.runtime.getBackgroundPage(function(backgroundWindow){
background = backgroundWindow;
newRandomNumber = background.rand();
})
Run Code Online (Sandbox Code Playgroud)
这样,您还可以使用该变量background访问背景窗口对象上的任何属性或方法集.请注意,此函数以异步方式运行,这意味着只有在调用回调之后才会定义变量background和newRandomNumber.