У меня есть функция, ожидающая события загрузки или ошибки для тега img. Иногда я получаю событие с ошибкой, а тег img имеет естественную ширину и естественный вес, равный нулю. Странно, что, глядя на вкладку сети в инструментах разработчика Chrome, код состояния для запроса изображения был 302, а перенаправленный запрос возвратился в порядке с статусом 200. (Фактическое изображение хранится на S3, но наш сервер перенаправляет туда).Получить сообщение об ошибке для загруженного img
Кроме того, в вопросе фактически отображаются, но не правильно, потому что я использую naturalWidth и naturalHeight для вычисления некоторых свойств CSS для изображения.
У меня также появилась ошибка, говорящая о том, что «загрузка изображения с использованием кросс-оригинала запрещена политикой совместного использования ресурсов Cross-Origin». Я не уверен, что это связано, или если он даже ссылается на один и тот же образ.
Я особенно смущен, потому что это происходит только для первого изображения в серии, и это случается только иногда.
Кто-нибудь знает, что происходит, или, по крайней мере, как выяснить, что вызывает событие ошибки?
UPDATE:
S3 ведро и сервер Перенаправление оба настроены на поддержку CORS. Однако оказывается, что всякий раз, когда это происходит, браузер использует кэшированное изображение, которое не имеет заголовка Access-Control-Allow-Origin. Я считаю, что происходит то, что раньше в приложении мы запрашиваем изображение без использования CORS и, следовательно, не имеем заголовков, то на этом этапе мы используем CORS, но мы попадаем в кешированную версию, которая не была получена с помощью CORS , Я все еще не знаю, как решить эту проблему. И я не уверен на 100%, что это то, что происходит, хотя я уверен, что он имеет какое-то отношение к кешированию и запросам перекрестного происхождения.
Я также все еще смущен тем, почему я получаю как ошибки, так и события загрузки для одного и того же тега img, и изображение на самом деле отображается. Кроме того, несмотря на то, что вызывается обработчик события загрузки, this.complete является false и this.naturalWidth и this.naturalHeight равны нулю.
Я обнаружил, что причина, по которой я получаю ошибку кросс-оригинала, связана с кэшированным ответом, который (как упоминалось в моем обновлении), когда я использую изображение в свойстве CSS-образа background-image из div. Тем не менее, я оставляю это открытым, потому что я до сих пор не понимаю, почему я получаю событие с ошибкой, хотя изображение очевидно видно. – Thayne