运行 content_scripts 中的不同脚本基于 "matches"

run different scripts in content_scripts based on "matches"

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

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 页面,并根据URL 匹配 httphttps。如果某些代码在两个脚本之间共享,那么这样做可能会更有效率(或者您可以将共享代码放在一个文件中,该文件被加载到两个脚本中,同时将一个单独的文件与非共享代码加载到每个脚本中) ).在这种情况下,您可以使用匹配两者的单个 match patternmatches 数组中的多个匹配模式。