6

外部ツールに対して適切な GitHub リポジトリのコンテンツを実行するためにまとめた単純な Javascript ブックマークレットがあります。

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

1

Greasemonkey ユーザースクリプト (Firefox) を使用して、この問題の回避策「修正」を作成しました。すべての CSP および https:// サイトでブックマークレットを使用できるようになりました。さらに、ブックマークレットを個別にブックマークに押し込むのではなく、簡単に編集できる素敵なライブラリ ファイルにブックマークレットを含めることができます。

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

于 2015-05-09T05:37:16.193 に答える