基于“匹配”在content_scripts中运行不同的脚本

时间:2016-10-01 03:55:20

标签: javascript firefox-addon firefox-webextensions

我刚刚开始使用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";

1 个答案:

答案 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文件加载到httphttps页面中,并根据匹配{{1}的URL更改您正在执行的操作}或http。如果某些代码是在两个脚本之间共享的话,那么这样做可能会更有效(或者你可以在一个文件中加载共享代码,同时将带有非共享代码的单独文件加载到每个文件中)。在这种情况下,您可以使用匹配两者的单个match patternhttps数组中的多个匹配模式。