6

我有一个简单的 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 上工作的任何想法?

4

3 回答 3

4

I've looked at this issue as well, mostly in Firefox. I wasn't aware it would work in Chrome; that might be a recent change. Short of FF changing to recognize bookmarklets as being outside the policy (as it should!), there is no work around. The script won't run, full stop, you are dead in the water.

Alternatives:

1.) Create an addon; or utilize an existing addon like Greasemonkey to run a userscript.

2.) Run the code in the web console. In FF, CTRL+Shift+K gets you there in a jiffy.

3.) FF's developer scratch pad also works. If you save the code in a file, you can access it relatively quickly using Shift+F4 (open scratchpad) > File > Open Recent > select your file > CTRL+R (run).

于 2013-11-07T01:27:44.780 回答
2

作为 CSP 阻止小书签的一种解决方法,您可以告诉小书签加载外部 CSS 样式表,并将您的 JS 代码注入其中。这就是我的热门新闻提要小书签的作用。请参阅我的其他答案

于 2014-08-14T18:44:18.197 回答
1

我使用 Greasemonkey 用户脚本(在 Firefox 中)为这个问题创建了一个解决方法“修复”。您现在可以在所有 CSP 和 https:// 网站上拥有小书签,并且将小书签放在一个漂亮、易于编辑的库文件中,而不是单独压缩到书签中。

见: http: //www.donnelly-house.net/programming/js/bookmarklets/bookmarklets.php

于 2015-05-09T05:37:16.193 回答