初めての Chrome 拡張機能を作成しています。jQuery とjQuery Image Desaturate プラグインを使用して、 http://www.flickr.comのページの画像の彩度を下げようとしています。
スクリプト (および jQuery とプラグイン) をプログラムで background.html にロードしています。
// On browser action click, we load jQuery and the desaturate plugin, then
// call our own flickrnoir.js to desaturate the photo.
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null, { file: "jquery.js" }, function() {
chrome.tabs.executeScript(null, {file: "jQuery.desaturate.js" }, function() {
chrome.tabs.executeScript(null, { file: "flickrnoir.js" });
})
});
});
で Flickr ページのアクセス許可を指定しましたmanifest.json
。
"permissions": [
"tabs", "http://www.flickr.com/", "http://*.static.flickr.com/"
]
これは問題なく動作しているように見えます。たとえば、これを に追加flickrnoir.js
し、Flickr ページを開いて拡張機能のボタンをクリックすることで、Flickr の写真ページのすべての div の背景を赤に変えることができます。
$("div").css("background-color", "#ff0000");
http://*.flickr.com/*
...ということで、jQuery が正常に読み込まれ、ページの DOM 要素に正常にアクセスして変更できるようになりました。
しかし、desaturate プラグインを使用して画像 (または実際にはすべての画像) の彩度を下げようとすると、セキュリティ エラーが発生します。私のコード:
$("img").desaturate();
...最終的には、次の行を実行する jQuery.desaturate プラグインのコードで終了します。
var imgPixels = canvasContext.getImageData(0, 0, imgW, imgH);
その時点で、Chrome はセキュリティ例外をスローします。
Uncaught Error: SECURITY_ERR: DOM Exception 18
...そして、これは私の足を止めます。
編集:さて、これはページがにあるためだとwww.flickr.com
思いますが、キャンバスにコピーしている画像はfarm6.static.flickr.com
?それはクロスドメイン ポリシーに違反していますか?
Chrome 拡張機能のセキュリティ モデル、クロスドメインの制限、または 2 つの相互作用についてはまだよく知らないcanvas
ので、これを理解するためにあなたが私に与えてくれる助けを借りることができますが、もちろん、私の基本的な質問は - - このセキュリティ例外を回避してコードを機能させるにはどうすればよいですか?