上下文

我目前正在开发一个浏览器扩展程序,该扩展程序可以在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扩展无法将内容脚本加载到某些页面中?
  • 需要进行哪些更改,以使扩展名在所有浏览器上都能正常运行?
  • 最佳答案

    我终于弄清楚了为什么使用Firefox时扩展的内容脚本不能在某些页面中加载。

    在使用Network开发人员工具分析了请求之后,事实证明,获取GitHub原始页面时会返回以下 header :

    Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox
    

    根据MDN Web Docssandbox CSP指令具有以下作用:



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



    此问题已得到确认,并有望在Firefox的将来版本中得到解决。

    关于firefox - Firefox内容脚本未在某些页面中加载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47622435/

    10-16 13:57
    查看更多