我有一个简单的 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
我已经阅读了关于该主题的这个 SE 问题,以及关于 CSP 的 github 博客文章,其中承认 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 上工作的任何想法?