我正在开发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
答案 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