Chrome扩展清单'匹配'

时间:2010-05-04 22:59:23

标签: json google-chrome-extension

我正在尝试使用简单的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,因此我的扩展可以操作运行的任何页面的DOM(通过scripts.js内的javascript)。我错过了什么,这一切都错了,或者是什么?

更新

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

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

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

  

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

7 个答案:

答案 0 :(得分:56)

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

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

(有关详细信息,请参阅Chrome Docs

顺便说一句,使用http://*/*可以更好地匹配所有网址(请参阅docs),如果您还需要匹配这些网址,则添加https://*/*

修改

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

答案 1 :(得分:45)

如果您想匹配每个网址,那么Google就会出于特殊模式:<all_urls>

样本用法:

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

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

答案 2 :(得分:2)

对于许多涉及错误的人来说:

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

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

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

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

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

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

答案 3 :(得分:1)

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

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

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

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

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

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

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

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

答案 4 :(得分:0)

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

 "manifest_version": 2,
 "content_scripts": [
    {
     "matches": [
        "*://*/*",
      ]
   }

答案 5 :(得分:-1)

“manifest_version”:2

是的,这是必须的.​​.

答案 6 :(得分:-3)

你忘了添加

“manifest_version”:2

哪一项是强制性的。