如何在 Firefox 中仅为书签小程序禁用 CSP?

如何在 Firefox 中仅为书签小程序禁用 CSP?

今天我注意到我无法在https://github.com/由于内容安全策略 (CSP) 限制。有没有办法在 Firefox 中仅对书签小工具禁用 CSP,而不对其他所有功能禁用?

我注意到了security.csp.enable中的选项about:config,但这会完全禁用 CSP。激活书签时,控制台会记录以下消息:

Timestamp: 04/22/2013 02:39:05 PM
Warning: CSP WARN:  Directive inline script base restriction violated

Source File: https://github.com/
Line: 0
Source Code:
javascript:...

答案1

Github 说它应该按照规范工作,但没有浏览器能正确实现:

https://github.com/blog/1477-content-security-policy#bookmarklets

您应该为您最喜欢的浏览器针对此问题打开一个错误,或者为其投票:

答案2

您可以尝试将您的书签转换为GreaseMonkey用户脚本。它们在特权环境中运行,不受 CSP 约束。

但是,用户脚本和书签的目的当然是不同的 - 用户脚本自动运行,而书签按需运行。您可以规避这种情况,例如,<button>在用户脚本中创建一个,将其附加到页面,并onclick在该按钮上设置事件侦听器以触发书签的代码。

代码应该是这样的:

// ==UserScript==
// @name            Name
// @description     Description
// @version         0.1
// @namespace       example.Lekensteyn
// @grant           none
// @include         http*://github.com/*/*/commit/*
// ==/UserScript==

var myBookmarklet = function () {
    // here goes the code of the bookmarklet
};

var newButton = document.createElement('button');
newButton.innerHTML = 'Execute my bookmarklet';

newButton.addEventListener('click', function(evt) {
    myBookmarklet();
});

document.getElementById('someElement').appendChild(newButton);

几乎逐字逐句地摘自我的用户脚本它也针对 GitHub。您可以使用debugger;脚本中的关键字在 Firebug 中调试用户脚本。

但请注意Firebug 本身目前也受 CSP 约束,因此您无法在控制台中执行代码(但您可以在“只读”模式下检查您的用户脚本)。这个错误

答案3

我使用 Greasemonkey 用户脚本(在 Firefox 中)创建了一个针对此问题的“解决方法”。现在,您可以在所有 CSP 和 https:// 网站上使用书签小程序,而且书签小程序可以放在一个漂亮、易于编辑的库文件中,而不是单独挤进书签中。

看:https://groups.google.com/d/msg/greasemonkey-users/mw61Ynw5ORc/Gl_BNUhtSq0J

答案4

如果你想在 Firefox 中启用 CSP 的网站上运行你的书签,你可以使用 CSS 样式表,请参阅我的StackOverflow 上的回答

相关内容