今天我注意到我无法在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 上的回答。