SECURITY_ERR: DOM Exception 18 при использовании getImageData в расширении Chrome

Я пишу свое первое расширение 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/"
]

Кажется, все работает нормально, и я могу, например, сделать красный фон всех div на странице с фотографиями Flickr, добавив его в flickrnoir.js , а затем открыв страницу Flickr и нажав кнопку моего расширения:

$("div").css("background-color", "#ff0000");

... Итак, у меня успешно загружен jQuery, и он может успешно получать доступ и изменять элементы DOM страницы http: //*.flickr.com/* .

Однако, когда я пытаюсь использовать плагин desaturate для обесцвечивания изображения (или фактически всех изображений) я обнаружил ошибку безопасности. Мой код:

$("img").desaturate();

... в конечном итоге оказывается в коде плагина jQuery.desaturate, выполняющем эту строку:

var imgPixels = canvasContext.getImageData(0, 0, imgW, imgH);

В этот момент Chrome генерирует исключение безопасности:

Uncaught Error: SECURITY_ERR: DOM Exception 18

... и это останавливает меня.

РЕДАКТИРОВАТЬ: Хорошо, я предполагаю, что это потому, что страница находится по адресу www.flickr.com , тогда как изображение я ' m копирование на холст осуществляется по адресу farm6.static.flickr.com ? Это нарушает междоменную политику?

Я действительно еще не знаком с моделью безопасности расширений Chrome или междоменными ограничениями на холсте , или как они взаимодействуют, поэтому я мог бы использовать любая помощь, которую вы можете дать мне в понимании этого, но, конечно, мой основной вопрос - как мне обойти это исключение безопасности и заставить мой код работать?

10
задан Matt Gibson 1 April 2011 в 11:19
поделиться