2010-10-29 17 views
32

Muchos ejemplos demuestran múltiples etiquetas de origen anidadas en la etiqueta de audio, como un método para superar la compatibilidad del códec en diferentes navegadores. Algo como esto -¿Cómo puedo agregar varias fuentes a una etiqueta de audio HTML5, programáticamente?

<audio controls="controls"> 
    <source src="song.ogg" type="audio/ogg" /> 
    <source src="song.mp3" type="audio/mpeg" /> 
    Your browser does not support the audio element. 
</audio> 

Mientras que con JavaScript, yo también estoy autorizado para crear un elemento de audio como este -

var new_audio = document.createElement("audio"); 

Dónde puedo fijar su fuente en el hotel .src - new_audio.src="....";

No pude encontrar cómo agregar varias fuentes en un elemento de audio a través de JavaScript, algo similar a las etiquetas de origen que se muestran en el fragmento de HTML.

¿Manipulo el new_audio y agrego las etiquetas <source... dentro de él, al igual que se manipularía cualquier otro elemento DOM? Estoy haciendo esto ahora y funciona, que es -

new_audio.innerHTML = "<source src='audio/song.ogg' type='audio/ogg' />"; 
new_audio.play(); 

Me pregunto si hay una forma más adecuada de hacerlo?

Respuesta

44

¿Por qué añadir varios archivos con JavaScript cuando se puede detectar los tipos soportados? Yo sugeriría en su lugar detectar el mejor tipo, simplemente estableciendo el src.

var source= document.createElement('source'); 
if (audio.canPlayType('audio/mpeg;')) { 
    source.type= 'audio/mpeg'; 
    source.src= 'audio/song.mp3'; 
} else { 
    source.type= 'audio/ogg'; 
    source.src= 'audio/song.ogg'; 
} 
audio.appendChild(source); 

Agregue tantos controles como tipos de archivos tenga.

+0

Voy a permitir que el usuario inserte una lista de formatos alternativos dentro del atributo de clase, lo que hace que sea un plugin simple de usar para ayudarlos a crear suspensiones de audio. Por lo tanto, no sabría qué tipos proporcionaban los usuarios finales. Gracias por la sugerencia canPlayType, sería útil. –

+0

Algo que noté, probablemente no quieras usar la palabra clave var en tu condicional. Está creando una nueva variable new_audio y no hace referencia a la existente. –

+0

@AndyWest Sí, también faltaba un corchete - código bastante malo todo :) – robertc

23

Se pueden utilizar los mismos métodos DOM como con cualquier otro elemento:

var source= document.createElement('source'); 
source.type= 'audio/ogg'; 
source.src= 'audio/song.ogg'; 
audio.appendChild(source); 
source= document.createElement('source'); 
source.type= 'audio/mpeg'; 
source.src= 'audio/song.mp3'; 
audio.appendChild(source); 
+1

¡Fantástico! resuelve mi problema, mucho más limpio. –

Cuestiones relacionadas