62

我正在尝试一个简单的 Chrome 扩展程序,但是在为matches我的content_scripts.

{
  "name": "My Extension",
  "version": "1.0",
  "description": "My Extension Experiment",
  "browser_action": {
    "default_icon": "icon.png",
    "default_title": "Ext",
    "default_popup": "popup.html"
  },
  "content_scripts": {
    "matches": ["http://*"],
    "js": ["scripts.js"]
  }
}

当我尝试将此扩展加载到 Chrome 中时,我收到以下消息:

无法从“C:\Users\foo\Desktop\Extensions\bar”加载扩展。
“content_scripts”的值无效。

不过,我看不出我的价值有什么“无效”。我要做的是匹配每个 URL,因此我的扩展程序可以操纵scripts.js它运行的任何页面的 DOM(通过 javascript 内)。我错过了什么,这一切都错了,还是什么?

更新

发布此问题后,我确实注意到 Google 示例与我的示例略有不同,因此我稍微修改了代码以反映它们的语法:

"content_scripts": [{
  "matches": ["http://*"],
  "js": ["scripts.js"]
}]

话虽如此,我在尝试加载我的扩展程序时仍然收到以下错误:

无法从“C:\Users\foo\Desktop\Extensions\bar”加载扩展。
“content_scripts[0].matches[0]”的值无效。

4

6 回答 6

83

您需要将content_scripts字段的值括在方括号中:

"content_scripts": [ {
  "matches": ["http://*"],
  "js": ["scripts.js"]
} ]

(有关更多信息,请参阅Chrome 文档)

顺便说一句, usinghttp://*/*将是所有 url 的更好匹配(请参阅文档),https://*/*如果您还需要匹配这些,请添加。

编辑:

在您进行编辑后,您得到的错误是因为匹配模式不正确。

于 2010-05-04T23:07:41.497 回答
69

如果你想匹配每个 URL,那么谷歌有一个特殊的模式就是为了这个目的:<all_urls>

示例用法:

"matches": ["<all_urls>"],

有关更多信息,请参阅此页面: https ://developer.chrome.com/extensions/match_patterns

于 2010-10-27T07:47:17.147 回答
10

任何匹配模式都应具有以下结构 [scheme] :// [host][path]

  1. 方案是'*' | 'http' | 'https' | '文件' | 'ftp'
  2. 主机是 ' ' | '。(除 '/' 和 '*' 以外的任何字符)+
  3. 路径是“/”(任何字符)

要匹配任何 HTTP/S 和 FILE URL,请使用:

 "matches": [
    "*://*/*",
    "file://*/*"
  ],

参考:https ://developer.chrome.com/apps/match_patterns

顺便说一句,为了允许访问本地文件 - 添加权限:

"permissions": [
   "file://*/*"
]

或在扩展设置页面上批准文件访问。

于 2018-09-21T11:56:23.180 回答
4

对于许多遇到以下错误的人:

'content_scripts[0].matches' is missing or invalid.

或者

'content_scripts[0].matches[0]': Empty path.

尝试使用您所需的特定 URL 填写或创建匹配字段。如果要使用所有 URL,请使用如下<all_urls>标记。

"content_scripts": [
        {
            "matches": ["<all_urls>"],
            "js": [ "jquery.js" ]
        }
    ]

“js”数组中列出的文件具有相对于您的应用程序的路径。换句话说,“manifest.json”的位置就是你的根目录。

注意:jquery.js 是我项目目录中的一个文件,你应该用你想要的任何脚本文件替换它。

于 2016-01-08T18:50:53.463 回答
1

经过多次尝试后,它匹配所有 URL 并且还支持 http 和 https。在此处输入代码

 "manifest_version": 2,
 "content_scripts": [
    {
     "matches": [
        "*://*/*",
      ]
   }
于 2021-01-31T10:13:28.693 回答
-2

兄弟你忘记添加了

“清单版本”:2

这是强制性的。

于 2018-03-19T13:13:49.030 回答