我正在尝试使用简单的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]'的值无效。
答案 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]
要匹配任何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
哪一项是强制性的。