Comment Attraper NETWORK_NO_SOURCE Erreurs avec une Balise Vidéo HTML5
Si aucun des < source > balises prévues pour un HTML5 < video > tag sont jouables, je veux afficher un message d'erreur.
Selon cette page sur le Mozilla Developer Network, il semble que je dois vérifier la networkState propriété de l'élément vidéo pour voir si des sources chargés, chacun séparé de la source de la balise jette sa propre erreur lorsqu'il ne parvient pas à charger.
Pour détecter tous les éléments enfants n'ont pas réussi à charger, vérifier la valeur de l'élément média de networkState attribut. Si c'est HTMLMediaElement.NETWORK_NO_SOURCE, vous savez que toutes les sources d'échec du chargement.
Mais à quel point dois-je vérifier la networkState? Si je vérifie immédiatement sur l'appel de video_tag.load(), il me dit toujours la networkState est NETWORK_NO_SOURCE même si la source des éléments sont valides et que la vidéo joue bien. Donc, je suppose que je hvae attendre jusqu'à ce que les balises de la source ont été essayé par le navigateur.
Voici le test:
var state = this._video_tag.networkState;
console.log( 'networkState', state );
if( state == this._video_tag.NETWORK_NO_SOURCE )
{
throw new Error( 'No valid sources' );
}
J'ai essayé toutes de la vidéo à la suite de l'élément événements avec source invalide tags: loadstart, loadedmetadata, loadeddata se & erreur avec les résultats suivants (dans Firefox):
- loadstart: appelés, mais networkState est NETWORK_LOADING
- loadedmetadata: pas appelé
- loadeddata se: pas appelé
- erreur: pas appelé
Cependant, si j'découvrez la vidéo de la balise dans Firebug, la networkState est NETWORK_NO_SOURCE comme prévu.
Quel cas dois-je utiliser pour contrôler le moment de vérifier la balise vidéo, ou est-il une meilleure manière de faire ceci?
OriginalL'auteur voidstate | 2012-02-07
Vous devez vous connecter pour publier un commentaire.
j'ai utilisé qqch pour vérifier l'état du réseau de la vidéos. ceci est pris à partir officielles du w3c html5 page ( http://dev.w3.org/html5/spec/Overview.html#the-video-element )
Cette solution ne fonctionnent pas si vous utilisez le <source> tag et pas la src="" attribut de l'élément multimédia.
OriginalL'auteur longilong
Si vous utilisez des balises de la source vous pouvez définir la onerror attribut sur la dernière source de la balise dans la liste à la place. Voir le bas de la section 4.8.8 sur cette page pour plus de détails.
De citer référence:
Cet exemple n'est pas parfait parce que vous n'obtenez pas l'objet d'événement comme vous le faites lorsque la onerror attribut est sur la balise vidéo (qui ne fonctionne que si vous avez un attribut src de la balise vidéo plutôt que dans une série de balises. Cependant, je crois que vous pouvez ensuite récupérer l'état d'erreur à partir de la balise vidéo avec le networkState JS variable sur cette balise. Je n'ai pas testé. Donc, c'est à vous à ce point. Cela ressemble à ce que j'ai ici sont peut-être satisfaisant pour vos besoins.
Notes:
Tout en place, vous pouvez écouter un évènement "erreur" sur la dernière balise source, j'ai trouvé que ce n'était pas fiable. Dans les cas où la précontrainte de l'attribut n'est pas défini sur aucun, je ne pouvais pas trouver un moyen fiable pour ajouter un écouteur pour l'événement avant l'événement déclenché. Cela m'a forcé à utiliser le onerror attribut.
Si vous ne trouver un moyen fiable pour écouter l'événement que je voulais ajouter cette remarque. Selon cette question de Chrome l'événement d'erreur sur la source de la balise n'a PAS de bulle qui signifie que vous avez à écouter sur cette balise spécifique.
OriginalL'auteur radicaledward101
La "erreur" de l'événement n'est pas appelée parce qu'elle est déclenchée par les éléments de l'intérieur, et pour faire de l'événement également être déclenchés sur l'élément, vous devez utiliser la méthode addEventListener avec le useCapture paramètre est défini sur true, comme ceci:
Et puis à l'intérieur de la fonction de rappel vous pouvez vérifier l'networkState de la propriété, qui va être NETWORK_NO_SOURCE si la vidéo ne peut pas lire les sources.
Découvrez les docs du MDN au sujet de la méthode addEventListener et la useCapture paramètre
https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
OriginalL'auteur Tiborg