Как я могу получить getImageData с другого сайта?SECURITY_ERR: исключение DOM 18 - PullRequest
1 голос
/ 08 марта 2012

Я работаю над онлайн-приложением для работы с изображениями. Он работает нормально, когда делает это с локальными файлами (на сервере), но как только я пытаюсь это сделать с другим источником, он ломается. Кажется, причиной этого является ограничение безопасности, цитата из whatwg :

Всякий раз, когда метод getImageData () двумерного контекста элемента холста, для которого флаг очистки источника установлен в значение false, вызывается с другими правильными аргументами, метод должен вызвать исключение SECURITY_ERR.

Так вот, интересно, можно ли как-нибудь обойти это? Все изображения будут получены из API Google, и я действительно хочу пропустить сохранение изображений, если смогу.

Спасибо.

1 Ответ

2 голосов
/ 08 марта 2012

Поскольку у вас, вероятно, нет доступа к серверу (-ам), с которого извлекаются исходные изображения, лучше всего использовать прокси-файлы через ваш сервер.

По сути, вы отправляете AJAXзапросите на сервере URL-адрес изображения, с которого вы хотите получить данные.Ваш сервер получает запрос и запрашивает изображение от вашего имени.Когда он получает файл, он base64 кодирует его и отправляет данные обратно вам.Поскольку данные изображения - это просто строка, вы можете создать из него объект изображения и манипулировать им через canvas, не беспокоясь о исходном домене.

Если вы хотите использовать jQuery, естьотличный плагин, который будет делать именно это, расположен здесь: http://www.maxnov.com/getimagedata/

Я использовал этот конкретный плагин раньше с отличными результатами.Отмечу, что вы должны (должны) разместить код прокси-сервера на своем собственном сервере.Вы можете использовать учетную запись автора appspot, но она ограничена некоторым количеством запросов в день и часто заканчивается.Автор объясняет, как самостоятельно разместить прокси-код здесь: http://www.maxnov.com/getimagedata/#using-your-own-server

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...