Canvas, iframe и Access-Control-Allow-Origin

Я схожу с ума от этой проблемы и надеюсь, что есть решение или обходной путь. У меня есть холст внутри iframe в другом домене (по соображениям безопасности). На этом холсте показана анимация/рисунок Processing.js. Мне нужно разрешить холсту загружать файлы изображений, расположенные в том же домене.

index.html с iframe находится в domain.com

index.html с canvas находится в sub.domain.com

Теперь я точно знаю, что:

  1. Холст может загружать/визуализировать удаленное изображение, но не может получить доступ к данным удаленного изображения (пикселям).
  2. Холст может получить полный доступ к файлу изображения в том же домене, если только он не воспроизводится в iframe (!?).
  3. Установка заголовка Access-Control-Allow-Origin просто позволяет получить доступ к файлам на других доменах.
  4. Холст вообще не поддерживает/не учитывает заголовки Access-Control-Allow-Origin.

Есть ли способ обойти все эти ограничения безопасности и просто воспроизвести холст в iframe для загрузки файла изображения?


person taseenb    schedule 15.08.2013    source источник


Ответы (1)


Я нашел решение своей проблемы (и увидел, что никто не ответил). На самом деле я кое-что забыл... Я использовал атрибут sandbox в теге iframe, и это было проблемой. После удаления изображения стали доступны на холсте, по крайней мере, в Firefox и Chrome (IE еще не тестировался). В любом случае, атрибут sandbox по-прежнему имеет очень плохую поддержку и, вероятно, совершенно бесполезен в междоменном сценарии.

Так. Я могу подтвердить, что с обычным iframe (без какого-либо параметра sandbox) нет проблем при загрузке изображений в canvas внутри iframe, если и только если изображение находится в том же домене, что и canvas страница.

person taseenb    schedule 16.08.2013
comment
У меня та же проблема, но я должен сохранить атрибут sandbox. Есть ли способ заставить Canvas работать в контексте sub.domain.com? Похоже, что Canvas в iframe/sandbox считает, что находится в контексте www.domain.com верхнего документа. Кто-нибудь решил это? Это 2019 год, и поведение одинаково как в FF, так и в Chrome, поэтому я полагаю, что это преднамеренно, а не ошибка. - person elixon; 28.01.2019