2016-08-14 52 views
1

我有一个API密钥和我的扩展需要的机密,我将它们存储在自己格式化的文件中。在WebExtension中调用背景和内容脚本中的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" 
      ] 
     } 
    ] 
} 

在弹出的页面我只能引用此文件中像<script type="text/javascript" src="../js/key.js"></script>并调用2个变量,但我不能工作了如何引用它,以便我的背景和内容脚本也可以访问它们。

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

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

但是,这并不工作。我发现了一个APP_KEY is not defined

main.js

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

有没有办法去尝试做我在做什么?

+0

请编辑您的问题,以包含**完整** [mcve]。在'background'键中定义的所有脚本[在相同的上下文中运行](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Specifying_background_scripts)。因此,* key.js *中定义的“APP_KEY”和“APP_SEC”可用于* background.js *中的代码。 [续...] – Makyen

+0

[续]:如果你只是在谈论从那里获取信息到内容脚本,那么你将不得不[把它作为消息传递](https://developer.mozilla.org/ en-US/Add-ons/WebExtensions/Content_scripts#Communicating_with_background_scripts)或内容脚本如何启动。具体取决于你的代码。因此,我们需要一个[mcve]。 – Makyen

+0

@makyen谢谢我试着添加一些更多的信息。有任何想法吗?我看到你已经提到过内容脚本是如何启动的? – dpDesignz

回答

1

这种工作方式您的愿望。一个JavaScript文件可以用于后台脚本和内容脚本,以共享相同的功能或变量。

backgroundrun in the same context中定义的所有脚本。因此,您的变量APP_KEYAPP_SEC(在key.js中定义)可用于background.js中的代码。

manifest.json文件的content_scripts密钥中的单个js密钥中定义的所有脚本共享一个上下文。这就是允许你在代码中使用jQuery之类的东西。如果两个集合中的matches关键结果都加载到特定页面或选项卡上,我没有检查是否为单独的js列表创建了单独的上下文。另外,我还没有检查过是否在加载内容脚本的方法和其他加载内容脚本的方法(例如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); 

控制台在加载扩展输出:

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

我不知道为什么,这不适合你,你在工作时:在导​​航到mozilla.org

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

控制台输出最初尝试过。你在评论中表示它现在正在为你工作。

+0

再次感谢Makyen :-D – dpDesignz

相关问题