Chrome扩展清单'匹配'

Ari*_*tle 41 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"]
  }
}
Run Code Online (Sandbox Code Playgroud)

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

无法从'C:\ Users\foo\Desktop\Extensions\bar'加载扩展程序.
"content_scripts"的值无效.

我无法看到关于我的价值的"无效".我要做的是匹配每个URL,因此我的扩展可以操作scripts.js运行的任何页面的DOM(通过javascript ).我错过了什么,这一切都错了,或者是什么?

更新

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

"content_scripts": [{
  "matches": ["http://*"],
  "js": ["scripts.js"]
}]
Run Code Online (Sandbox Code Playgroud)

话虽这么说,我仍然在尝试加载我的扩展时收到以下错误:

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

adr*_*nks 61

您需要content_scripts用方括号括起字段的值:

"content_scripts": [ {
  "matches": ["http://*"],
  "js": ["scripts.js"]
} ]
Run Code Online (Sandbox Code Playgroud)

(有关详细信息,请参阅Chrome文档)

顺便提一下,使用它http://*/*会更好地匹配所有网址(请参阅文档),https://*/*如果您还需要匹配这些网址,请添加.

编辑:

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


thd*_*oan 49

如果您想匹配每个网址,那么Google就会为此目的设置一种特殊模式: <all_urls>

样品用法:

"matches": ["<all_urls>"],
Run Code Online (Sandbox Code Playgroud)

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

  • 很酷,我还不知道.对于那些寻找相关文档的人来说,链接实际上是:http://code.google.com/chrome/extensions/match_patterns.html (2认同)
  • 在网站重组后,所选答案中所有指向code.google.com的链接以及此之前的所有评论都会被破坏.我用工作链接修正了所选答案本身. (2认同)

Dav*_* D. 5

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

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

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

 "matches": [
    "*://*/*",
    "file://*/*"
  ],
Run Code Online (Sandbox Code Playgroud)

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

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

"permissions": [
   "file://*/*"
]
Run Code Online (Sandbox Code Playgroud)

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