如何在chrome扩展中的后台脚本之间传递变量值

时间:2014-01-09 05:28:05

标签: google-chrome-extension

我正在开发Google Chrome扩展程序。我在我的一个后台javascript文件(example.js)中为变量设置了值。我需要访问或传递此值到另一个背景javascript文件(extjs.js)。我该怎么做?是否存在全局变量概念?我在浏览器控制台中没有收到任何错误。

我的manifest.json

{
"name": "Example",
"version": "31.0.1650.57",
"manifest_version": 2,
"background":{
"scripts":["common.js","example.js","extjs.js"]
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["myscript.js"]
}
]
}

my example.js

function trial()
{
/... some functionality../
var result = data;
}

我的extjs.js

alert(result);

我知道我错过了什么。

此致 NIKHIL

1 个答案:

答案 0 :(得分:2)

所有后台脚本共享相同的JS上下文,因此在其中一个脚本中声明的任何变量/函数都可供所有其他脚本使用(加载顺序当然起作用)。

指定一个或多个后台脚本时,Chrome会自动创建一个最小的HTML页面,并在正文中插入一些<script>标记。例如。您自动生成的背景页应如下所示:

<html>
    <head></head>
    <body>
        <script src="common.js"></script>
        <script src="example.js"></script>
        <script src="extjs.js"></script>
    </body>
</html>

您可以导航至chrome://extensions并选中Developer mode复选框,查看您的背景页面。然后,在每个扩展名下都有一个标有“后台页面”的链接,您可以单击该链接打开后台页面的DevTools控制台。


<强>更新

我只是注意到你正试图从全局上下文中访问函数局部变量(在trial()函数中定义)(这是不可能的)。

由于在var result函数中定义了trial(),因此在函数范围之外可以访问 。 (即,您将无法从example.js引用它。)

您需要像这样更改代码:

<强> example.js:

var outer_result = 0;
function trial() {
    var inner_result = 1;   // <-- this is a local variable
    outer_result = 2;       // <-- this is a global variable
}
// `inner_result` is undefined outside the function

<强> extjs.js:

console.log(outer_result);   // <-- '0' since `trial()` is not invoked yet
console.log(inner_result);   // <-- 'undefined' since it is never defined

trial();   // <-- executing `trial()` function

console.log(inner_result);   // <-- 'undefined' since it is function-local
console.log(outer_result);   // <-- '2' since `trial()` modified it