Javascript 在后台调用API键,在WebExtension中调用内容脚本

Javascript 在后台调用API键,在WebExtension中调用内容脚本,javascript,firefox-addon-webextensions,Javascript,Firefox Addon Webextensions,我有一个API密钥和我的扩展名所需的秘密,我已经将它们存储在一个自己的文件中,格式如下 key.js var APP_KEY = 'App Key Goes Here'; var APP_SEC = 'App Secret Goes Here'; manifest.json // manifest.json { "manifest_version": 2, "name": "Trakt for IMDb", "version": "0.1a", "backgro

我有一个API密钥和我的扩展名所需的秘密,我已经将它们存储在一个自己的文件中,格式如下

key.js

var APP_KEY = 'App Key Goes Here';
var APP_SEC = 'App Secret Goes Here';
manifest.json

// manifest.json
{
    "manifest_version": 2,
    "name": "Trakt for IMDb",
    "version": "0.1a",
    "background": {
        "scripts": [
                "js/key.js",
                "js/background.js"]
    },
    "content_scripts": [
        {
            "js": [
                "js/key.js",
                "js/main.js"
            ]
        }
    ]
}
在弹出页面上,我可以像
一样引用这个文件,它调用了两个变量,但我无法确定如何引用它,以便我的背景和内容脚本也可以访问它们

我已经尝试在我的
manifest.json
文件中引用
key.js
文件,如下所示

"background": {
    "scripts": [
        "js/key.js",
        "js/background.js"
    ]
}
但这不起作用。我得到一个未定义的
应用程序密钥

main.js

console.log('Content: ' + APP_KEY);

有什么办法可以试着做我正在做的事吗?

这是你想要的方式。一个JavaScript文件可以在后台脚本和内容脚本中使用,以共享相同的函数或变量

键中定义的所有脚本。因此,在
KEY.js
中定义的变量
APP_KEY
APP_SEC
可用于
background.js
中的代码

文件密钥中单个密钥中定义的所有脚本共享一个上下文。这就是允许您在代码中使用jQuery之类的东西的原因。我没有检查是否为单独的
js
列表创建了单独的上下文,
是否匹配在特定页面或选项卡上加载的两个集合中的
键结果。此外,我没有检查manifest.json文件的
content\u脚本
加载内容脚本的方法和其他加载内容脚本的方法(例如)之间是否共享单个上下文

以下是已经在Firefox和Google Chrome中测试过的完整扩展。在这两种浏览器中,
key.js
中定义的变量在后台脚本和内容脚本中都可用

manifest.json:

{
“清单版本”:2,
“名称”:“其他文件中的变量”,
“说明”:“测试另一个JavaScript文件中变量的可用性”,
“版本”:“0.1”,
“背景”:{
“脚本”:[
“js/key.js”,
“js/background.js”]
},
“内容脚本”:[
{
“匹配项”:[“*://*.mozilla.org/*”],
“js”:[
“js/key.js”,
“js/contentScript.js”
]
}
]
}
js/key.js:

var-APP_-KEY='APP-KEY在这里运行';
var APP_SEC=‘这里有应用程序机密’;
js/background.js:

console.log('Background:'+APP_键);
console.log('Background:'+APP_SEC);
js/contentScript.js:

console.log('Content:'+APP_KEY);
console.log('内容:'+应用程序秒);
加载扩展时的控制台输出:

Background:App Key在这里
背景:应用程序的秘密就在这里
导航到以下位置时的控制台输出:

Content:App Key在这里
内容:应用程序的秘密在这里

我不知道为什么当你最初尝试它时,它对你不起作用。您已在评论中声明,它现在对您有效。

请在您的问题中包含完整的注释。在
后台
键中定义的所有脚本。因此,KEY.js中定义的
APP_KEY
APP_SEC
可用于background.js中的代码。[续…][续]:如果您只是在谈论如何将信息从那里获取到内容脚本,那么您必须,或者如何启动内容脚本。具体取决于您的代码。因此,我们需要一份报告。@makyen谢谢,我已经尝试添加了更多信息。有什么想法吗?我看到您提到了内容脚本是如何启动的?在
content\u scripts
条目中的单个对象中的所有脚本(即为
content\u scripts
定义的数组中的一个条目)都按照
js
数组中列出的顺序加载到相同的上下文中。因为您说过您遇到了问题,所以我实际上使用了相同的
key.js
文件测试了这一点,该文件包含在
content\u脚本和
background
中。内容脚本和背景脚本都可以使用
key.js
中定义的变量。我无法直接使用您的manifest.json进行测试,因为它引用了问题中未包含的文件。换句话说,我已经尝试了您所说的您想要做的事情,并且按照您所描述的方式工作。这意味着还有其他事情在发生。加载扩展时,浏览器控制台(Ctrl-Shift-J或Mac上的Cmd-Shift-J)会显示什么?尝试将manifest.json简化为演示问题和问题所需的最低版本(同时添加能够复制问题所需的任何其他内容)。再次感谢Makyen:-D