Условие гонки в этом случае было возможно:
<video autoplay src="…"></video>
<script>alert("wait!")</script>
<script>$('video').on('play',…)</script>
Однако, спецификация была изменена, чтобы облегчить эту проблему. Теперь браузеры должны запускать очередь событий до следующего цикла обработки событий вместо немедленного их запуска.
Если сценарий, подключающий обработчики событий, является встроенным сценарием, следующим сразу за <video>
, с запуском без ожидания для DOMReady, условие состязания в совместимых браузерах не будет. 1013 *
Если вы используете внешний или асинхронный сценарий, ждете DOMReady, используете setTimeout
или синхронный XHR, тогда вы можете пропустить эти события, поскольку эти вещи могут вызвать обработку цикла событий (хотя я не уверен на 100%, остановка сети позволяет браузерам обрабатывать цикл событий).
Я не знаю, был ли обновлен WebKit для поддержки более безопасного поведения. Если у вас все еще есть проблемы, вы можете использовать методы, которые работают, даже если события запускаются мгновенно:
Использовать встроенный обработчик событий:
<video onplay="…">
Создать элемент программно (document.createElement('video')
) с прикрепленными обработчиками до его вставки в документ.