今日、コンテンツセキュリティポリシー(CSP)の制限のため、ブックマークレットを https://github.com/ で実行できないことに気付きました。 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:...
ブックマークレットを GreaseMonkey userscriptsに変換してみてください。これらは特権環境で実行され、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);
ほぼ文字通り my userscript から取得します。これもGitHubをターゲットにしています。スクリプトでdebugger;
キーワードを使用して、Firebugでユーザースクリプトをデバッグできます。
ただし、Firebug自体は今のところCSPの対象となっているため、たとえば、コンソールでコードを実行します(ただし、「読み取り専用」モードでユーザースクリプトを検査できます)。これは このバグ で対処されています。
Githubは仕様どおりに動作するはずであると述べていますが、ブラウザが正しく機能していません。
https://github.com/blog/1477-content-security-policy#bookmarklets
この問題については、お気に入りのブラウザーのバグを開くか、投票してください。
多くの回答ではユーザースクリプト(TamperMonkeyやGreaseMonkeyなど)が推奨されていますが、一部のページは、これらの拡張機能による理由でブラックリストに登録されていることを覚えておきたいと思います。 (もちろん、ブラックリストをオーバーライドできますが、開発者はセキュリティを考慮しており、これらのページをロックアウトしました)。
たとえば、ブックマークレットを使用して、AmazonリストからReviewMetaにすばやく移動したかったのですが、Amazonは安全でないスクリプトソースをブロックしました(更新:ブロックされませんでしたが、スクリプトがありませんでした。残念です)。ユーザースクリプト拡張機能は、悪意のあるユーザースクリプトがインストール/使用されるのを防ぐために、デフォルトで銀行やショッピングサイトでブラックリストに登録されています。
(追伸これは答えそのものではありませんが、ブラックリストに登録されているページを見つけてブラックリストから外すのをためらうために、ユーザースクリプトを入手する前にこれを覚えておくことは有用だと思いました。)