Firefox内容脚本未在某些页面中加载

Pyv*_*ves 4 firefox firefox-addon

上下文

我目前正在开发一个浏览器扩展程序,它正在按照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
}
Run Code Online (Sandbox Code Playgroud)

这是相关的content.js:

console.log("Content script loaded");
Run Code Online (Sandbox Code Playgroud)

问题

Content script loaded在使用Chrome和Opera时,无论访问过的页面如何,系统地都会记录.然而,在使用Firefox时,内容脚本似乎不会在某些页面中加载,例如以下的原始GitHub页面:https: //raw.githubusercontent.com/badges/shields/master/README.md

Firefox控制台中没有错误消息说明为什么内容脚本未在该特定页面上执行.

问题

  • 为什么Firefox扩展无法将内容脚本加载到某些页面?

  • 需要进行哪些更改才能使扩展程序在所有浏览器上始终如一?

在此先感谢,任何帮助将不胜感激!

Pyv*_*ves 6

我终于弄清楚为什么在使用Firefox时扩展程序的内容脚本没有在某些页面中加载.

在使用网络开发人员工具分析请求后,发现在获取GitHub原始页面时会返回以下标头:

Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox
Run Code Online (Sandbox Code Playgroud)

根据MDN Web Docs,sandboxCSP指令具有以下效果:

为所请求的资源启用沙箱[...].它对页面的操作应用限制,包括阻止弹出窗口,阻止插件和脚本的执行以及强制执行同源策略.

因此,Firefox阻止扩展程序在使用沙盒CSP的页面中执行内容脚本,而其他浏览器(如Chrome和Opera)确实允许此行为.Mozilla的Bugzilla(12670271411641)中的相关错误报告强调:

由于独特的起源,CSP"沙盒"指令阻止内容脚本匹配

这个问题已得到承认,并有望在未来的Firefox版本中修复.

  • 我也有一个附加组件并经历了同样的事情。几个月来我一直在想为什么脚本无法加载,非常感谢您的回答! (2认同)