【发布时间】:2020-02-03 21:03:34
【问题描述】:
AFAIK,内容脚本中的所有顶级变量在窗口中必须是全局唯一的。因此,如果两个内容脚本都包含let port = ...; 之类的行,它们将破坏扩展名。这种行为使关注点分离变得非常困难,因为如果将功能分组到目录和文件中,您将混淆哪些变量名仍然可以使用。有没有规范的方法可以避免这个问题?
这是一个最小的例子:
manifest.json
{
"manifest_version": 2,
"name": "test",
"version": "1.0",
"applications": {
"gecko": {
"id": "test_script@example.com"
}
},
"content_scripts": [
{
"matches": ["*://*.google.com/*"],
"js": ["read/index.js", "write/index.js"]
}
]
}
读取/index.js
console.log("i am read");
写/index.js
console.log("i am write");
加载 Google 页面时,“我正在阅读”和“我正在写”将打印到控制台。但是,如果我们对内容脚本做一些小的改动会怎样:
读取/index.js
let message = "i am read";
console.log(message);
写/index.js
let message = "i am write";
console.log(message);
现在只会打印“我被读”了。
【问题讨论】:
-
你想完成什么?它可能不是的语言。你认为你错在哪里?
-
请注意,如果那些脚本文件只包含函数,这不是问题。因为使用
let或const初始化的变量只属于它所在的块的范围。这将是函数中的。
标签: javascript scope firefox-addon separation-of-concerns