我刚刚开始使用JavaScript,并且正在尝试修改MDN教程中的脚本,Your First WebExtension
我正在尝试在网页周围绘制一个红色或蓝色的框,具体取决于它是http://还是https://。但是,只会运行一个脚本。
manifest.json是这样的:
{
"manifest_version": 2,
"name": "HTTPS Detect",
"version": "1.0",
"description": "Draws a blue border around HTTPS protected websites. Non-HTTPS sites are given a red border, indicating they do not provide encryption.",
"icons": {
"48": "icons/border-48.png"
},
"content_scripts": [
{
"matches": ["https://*/*"],
"js": ["httpsdetect.js"],
"matches": ["http://*/*"],
"js": ["nohttps.js"]
}
]
}
httpsdetect.js如下:
document.body.style.border = "5px solid blue";
nohttps.js是:
document.body.style.border = "5px solid red";
答案 0 :(得分:1)
content_scripts键是一个对象数组(每个包含一个强制的matches
键),而不仅仅是一个具有相同键的多个副本的对象。您拥有它的方式,在同一个对象中有两个matches
和两个js
个键。这将被解释为文件后面的密钥,覆盖前一个文件。
对于每个matches
,它应该是数组中的不同对象。您的 manifest.json 可能如下所示:
的manifest.json :
{
"manifest_version": 2,
"name": "HTTPS Detect",
"version": "1.0",
"description": "Draws a blue border around HTTPS protected websites. Non-HTTPS sites are given a red border, indicating they do not provide encryption.",
"icons": {
"48": "icons/border-48.png"
},
"content_scripts": [
{
"matches": ["https://*/*"],
"js": ["httpsdetect.js"]
},
{
"matches": ["http://*/*"],
"js": ["nohttps.js"]
}
]
}
或者,假设您只加载一个文件,则可以将相同的JavaScript文件加载到http
和https
页面中,并根据匹配{{1}的URL更改您正在执行的操作}或http
。如果某些代码是在两个脚本之间共享的话,那么这样做可能会更有效(或者你可以在一个文件中加载共享代码,同时将带有非共享代码的单独文件加载到每个文件中)。在这种情况下,您可以使用匹配两者的单个match pattern或https
数组中的多个匹配模式。