Firefox 中带有 CSP 的 Javascript 书签

标签 javascript firefox bookmarklet content-security-policy

我有一个简单的 Javascript 书签,我把它放在一起以针对外部工具运行适当的 GitHub 存储库的内容:

javascript:(function(){ 
    var isApex = false;
    var sourceLangs = document.getElementsByClassName('lang');
        for (var i = 0; i < sourceLangs.length; ++i) {
        var l = sourceLangs[i]; 
        if(l.innerHTML == 'Apex') {
            isApex = true;
            // alert('This is an Apex repo');
        }
    }
    if(location.hostname != 'github.com' || isApex == false) {
        alert('This is not a GitHub Apex repository!');
    }
    else {
         window.open('https://githubsfdeploy.herokuapp.com/app/githubdeploy'+location.pathname);
    }

})();

当我在 Chrome 或 IE 中运行它时(在通过 Daring Fireball 的 JS 书签生成器运行它之后,它工作正常。在 Firefox 中,它生成内容安全策略错误:

[15:33:19.318] Content Security Policy: Directive inline script base restriction violated @ https://github.com/Groundwire/Campaign-Combiner

我读过 this SE question on the topic , 和 github blog post about CSP ,它承认 CSP 不应干扰小书签,但当时(2013 年 4 月),“没有浏览器能正确理解这一点。”目前的情况是 Firefox 仍然出错,但 Chrome 和 IE 有吗?

我还找到了一篇关于用户脚本和 CSP 的博文,作者通过包含来自 github 存储库的代码解决了这个问题。我试过了,将我的小书签修改为:

javascript:document.body.appendChild(document.createElement("script")).src="https://raw.github.com/tet3/GitHubInstallerBookmarklet/master/GHIBkmarklet.js";void(0)

但不出所料,这对小书签不起作用,因为调用代码仍然来自浏览器。

简而言之 - 关于如何让这个小书签在 Firefox 上工作有什么想法吗?

最佳答案

我也看过这个问题,主要是在 Firefox 中。我不知道它可以在 Chrome 中运行;这可能是最近的变化。除非 FF 更改为将小书签识别为不在政策范围内(这是应该的!),否则没有解决方法。脚本不会运行,完全停止,你已经死在水里了。

备选方案:

1.) 创建一个插件;或者利用现有的插件(如 Greasemonkey)来运行用户脚本。

2.) 在 Web 控制台中运行代码。在 FF 中,CTRL+Shift+K 可让您快速到达那里。

3.) FF 的开发人员便签本也可以使用。如果将代码保存在文件中,则可以使用 Shift+F4(打开暂存器)> 文件 > 打开最近使用 > 选择文件 > CTRL+R(运行)相对快速地访问它。

关于Firefox 中带有 CSP 的 Javascript 书签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19822716/

相关文章:

javascript - 如何修改包含同名键的对象数组?

javascript - angularJS - 使用逻辑运算符内联多个过滤器

javascript - 如何使用 Addon SDK 操作 Firefox UI?

javascript - 在 Firefox 中通过 javascript 下载图像

javascript - 为什么从书签执行js片段时所有样式都丢失了?

javascript - 使用 Javascript 更改图像转换

javascript - 在谷歌地图上使用 MarkerWithLabel 隐藏标记

python - 更改 Geckodriver for Python Selenium 的日志级别

javascript - 使用随机元素名称自动填充文本区域的书签

javascript - 让小书签在后台运行并根据页面内容更新进行操作