Почему Safari бросает ошибку CORS при настройке данных base64 на изображение crossOrigin = 'Anonymous'?
У меня возникла проблема, когда установка изображения src (изображение, созданного с помощью new Image
), на кодированное изображение с базой 64 не выполняется, бросая:
Cross-origin image load denied by Cross-Origin Resource Sharing policy.
У меня уже image.crossOrigin = 'Anonymous'
.
См. следующий код: http://codepen.io/bedeoverend/pen/aORQzg. Он работает в Chrome, но не в Safari. Черно-белое изображение круговой диаграммы должно отображаться внизу, если оно работает.
Почему это происходит и как оно может быть разрешено?
UPDATE:
Чтобы уточнить, я сделал более целенаправленную кодировку здесь: http://codepen.io/bedeoverend/pen/BNGarr
Кажется, что установка crossOrigin = 'Anonymous'
на изображении, а загрузка в base64 не выполняется для Safari. Оба текста изменяются на Worked...
на Chrome 44, но в Safari 8.0.3 ошибка перекрестного источника анонимного не выполняется. EDIT: также не удается выполнить Firefox 35 и 39.
Итак, теперь вопрос заключается в том, почему, когда для свойства Image CrossOrigin установлено значение "Аноним", Safari не загружает изображения base64 в?
Ответы
Ответ 1
MDN утверждает, что "у вас должен быть сервер, содержащий изображения с соответствующим заголовком Access-Control-Allow-Origin".
По в спецификации,
подчеркнуть мой
Это, к сожалению, можно использовать для выполнения рудиментарного сканирования портов локальной сети пользователя [...] Пользовательские агенты могут реализовывать политики контроля доступа с несколькими исходными кодами, которые более строгие, чем те, которые описаны выше для смягчения этой атаки, но, к сожалению, такие политики обычно не совместимы с существующим веб-контентом ".
Вы можете просто обходным путем, проверив строку url
, если она начинается с data:
, то она, вероятно, не будет использоваться с заголовком перекрестного происхождения, тогда вы можете вернуть свойство crossOrigin
обратно в null
.