Как поймать ошибку NETWORK_NO_SOURCE с тегом HTML5 Video

Если ни один из тегов , предоставленных для тега HTML5 , не воспроизводится, я хочу вывести ошибку.

Согласно этой странице в Mozilla Developer Network, похоже, что я должен проверить свойство networkState элемента video, чтобы узнать, загружены ли какие-либо источники, поскольку каждый отдельный тег источника выбрасывает свою собственную ошибку, когда он не загружается.

Чтобы определить, что все дочерние элементы не загрузились, проверьте значение атрибута networkState медиаэлемента. Если это значение HTMLMediaElement.NETWORK_NO_SOURCE, вы знаете, что все источники не удалось загрузить.

Но в какой момент я должен проверить networkState? Если я проверяю сразу после вызова video_tag.load(), он всегда сообщает мне, что networkState - NETWORK_NO_SOURCE, даже если исходные элементы действительны и видео воспроизводится нормально. Поэтому я предполагаю, что мне нужно подождать, пока теги источника не будут опробованы браузером.

Вот тест:

var state = this._video_tag.networkState;       
console.log( 'networkState', state );
if( state == this._video_tag.NETWORK_NO_SOURCE )
{
    throw new Error( 'No valid sources' );
}

Я попробовал все следующие события видеоэлемента с недопустимыми исходными тегами: loadstart, loadedmetadata, loadeddata & error со следующими результатами (в Firefox):

  • loadstart: вызывается, но состояние сети NETWORK_LOADING
  • loadedmetadata: не вызывается
  • loadeddata: не вызывается
  • error: не вызывается

Однако, если я проверю тег video в Firebug, состояние сети NETWORK_NO_SOURCE, как и ожидалось.

Какое событие я должен использовать для управления проверкой видеотега, или есть лучший способ сделать это?

8
задан voidstate 7 February 2012 в 11:55
поделиться