javascript - 在 WebExtension 的后台和内容脚本中调用 API key

标签 javascript firefox-addon-webextensions

我的扩展程序需要一个 API key 和密码,我已将它们存储在一个文件中,其格式如下。

key.js

var APP_KEY = 'App Key Goes Here';
var APP_SEC = 'App Secret Goes Here';

list .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"
            ]
        }
    ]
}

在弹出页面上,我可以引用此文件,例如 <script type="text/javascript" src="../js/key.js"></script>它调用这两个变量,但我不知道如何引用它,以便我的背景和内容脚本也可以访问它们。

我尝试引用key.js文件在我的manifest.json文件如下

"background": {
    "scripts": [
        "js/key.js",
        "js/background.js"
    ]
}

但这行不通。我收到 APP_KEY is not defined

main.js

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

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

最佳答案

这会按照您想要的方式工作。单个 JavaScript 文件可以在后台脚本和内容脚本中使用,以共享相同的函数或变量。

background 中定义的所有脚本关键run in the same context 。因此,您的变量 APP_KEYAPP_SEC ,如 key.js 中定义,可用于 background.js 中的代码.

单个 js 中定义的所有脚本manifest.json 内的键文件的 content_scripts key 共享一个上下文。这使得您可以在代码中使用 jQuery 之类的东西。我还没有检查是否有为单独的 js 创建单独的上下文列出,如果 matches key 导致这两个集合都加载到特定页面或选项卡上。此外,我还没有检查 manifest.json 文件的 content_scripts 之间是否共享单个上下文。加载内容脚本的方法和其他加载内容脚本的方法(例如 tabs.executeScript‌​() )。

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

manifest.json:

{
    "manifest_version": 2,
    "name": "Variables in other files",
    "description": "Test availability of variables from anther JavaScript file",
    "version": "0.1",
    "background": {
        "scripts": [
                "js/key.js",
                "js/background.js"]
    },
    "content_scripts": [
        {
            "matches": ["*://*.mozilla.org/*"],
            "js": [
                "js/key.js",
                "js/contentScript.js"
            ]
        }
    ]
}

js/key.js:

var APP_KEY = 'App Key Goes Here';
var APP_SEC = 'App Secret Goes Here';

js/background.js:

console.log('Background: ' + APP_KEY);
console.log('Background: ' + APP_SEC);

js/contentScript.js:

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

加载扩展时的控制台输出:

Background: App Key Goes Here
Background: App Secret Goes Here

导航到 mozilla.org 时的控制台输出:

Content: App Key Goes Here
Content: App Secret Goes Here

我不确定为什么当您最初尝试时这对您不起作用。您在评论中表示它现在对您有用。

关于javascript - 在 WebExtension 的后台和内容脚本中调用 API key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38941405/

相关文章:

javascript - Firefox WebExtension 导入服务

从 Firefox Web 扩展执行 Javascript shell 命令

javascript - 单击按钮时从内容脚本打开选项页面?

javascript - 火狐扩展。如何从控制台访问 "browser"命名空间?

javascript - 没有换行符的 Chrome JavaScript 开发人员控制台 : Is it possible to call console. log()?

php - ∞ 在插入到 MySQL 表中时被转换为 ∼

javascript - 哪个 Javascript 函数库 : Underscore or wu. js 或 Functional 或...?

javascript - 将参数传递到 browser.executeScript

javascript - 如何在没有临时变量的情况下扩展方法(猴子补丁)?

javascript - 无法从 Firefox 中的加载项访问浏览器本地存储