152 • Глава 4
А эту проблему с условием состязания когда-нибудь починят? Я понимаю, что, технически, эта проблема всегда существовала в браузерах. Например,
элемент
image
: если событие
load
срабатывает до того, как присоединяется обработчик
события загрузки, ничего не происходит. Такое можно наблюдать, когда изображение уже
загружено в кэш — оно загружается слишком быстро, или в среде разработки, где скорость
доставки такая, будто файлы подгружает обпившийся энергетиков Супермен. Событие
попросту не срабатывает.
У изображений нет состояний
ready
, но есть свойство
complete
. Пока изображение за-
гружается, значение
complete
равно
false
. Как только загрузка завершилась (обратите
внимание, что это также означает завершение загрузки с ошибкой — из-за какого-то сбоя),
свойство
complete
принимает значение
true
. Таким образом, перед привязкой события
load
можно проверять свойство
complete
и, если оно равно
true
, вручную запускать об-
работчик события
load
.
Поскольку данная логика для изображений существует уже очень давно, было бы логично
ожидать, что ее распространят и на элементы медиа. Поэтому, технически, все вышепере-
численное нельзя считать ошибкой, каким бы странным подобное поведение ни казалось
мне и вам!