上下文
我目前正在开发一个浏览器扩展程序,该扩展程序可以在Chrome和Opera上正常运行,但是在Firefox上却遇到了问题。这是重现该问题所需的manifest.json
的最低版本:
{
"name": "Example",
"version": "0.0.1",
"author": "Pyves",
"content_scripts": [
{
"all_frames": true,
"matches": [
"<all_urls>"
],
"js": [
"content.js"
]
}
],
"manifest_version": 2
}
这是相关的
content.js
:console.log("Content script loaded");
问题
使用Chrome和Opera时,无论访问哪个页面,
Content script loaded
都会被系统地记录。但是,使用Firefox时,某些页面似乎未加载内容脚本,例如原始的GitHub页面,如下所示:https://raw.githubusercontent.com/badges/shields/master/README.md
Firefox控制台中没有错误消息,说明为什么未在该特定页面上执行内容脚本。
问题
最佳答案
我终于弄清楚了为什么使用Firefox时扩展的内容脚本不能在某些页面中加载。
在使用Network开发人员工具分析了请求之后,事实证明,获取GitHub原始页面时会返回以下 header :
Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox
根据MDN Web Docs,
sandbox
CSP指令具有以下作用:因此,Firefox阻止扩展程序使用沙箱CSP在页面中执行内容脚本,而其他浏览器(例如Chrome和Opera)的确允许这种行为。 Mozilla的Bugzilla中的相关错误报告(1267027和1411641)强调:
此问题已得到确认,并有望在Firefox的将来版本中得到解决。
关于firefox - Firefox内容脚本未在某些页面中加载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47622435/