Создание параметра «type» для HTML5 <audio> программно с помощью Javascript

1

В настоящее время я создаю аудио-элемент с JS следующим образом:

var newAE = document.createElement('audio');
    newAE.id = "ios-audio";
    newAE.src = obj.media;
document.getElementById('ios').appendChild(newAE);

Это здорово, но мне также необходимо программно установить type на основе содержимого входящего значения obj.media.

type="audio/mpeg"
type="audio/ogg"

Я думал, что это сработает:

var enctype = 'audio/mpeg';

if (obj.media == "https://example.com/myaudiofile.ogg") {
  enctype = 'audio/ogg';
}

var newAE = document.createElement('audio');
  newAE.id = "ios-audio";
  newAE.src = obj.media;
  newAE.type = enctype;
document.getElementById('ios').appendChild(newAE);

Но он не создает параметр type вообще. Я все еще получаю это в DOM:

<audio id="ios-audio" src="https://example.com/myaudiofile.mp3"></audio>

Когда желаемым результатом в этом случае будет:

<audio id="ios-audio" src="https://example.com/myaudiofile.mp3" type="audio/mpeg"></audio>

Думаю, я делаю это неправильно, так может кто-нибудь указать мне в правильном направлении, пожалуйста?

Пример ниже (без переключателя mp3/ogg, поскольку это не имеет значения)

function create(media) {

  var enctype = "audio/mpeg";
  
  var newAE = document.createElement('audio');
      newAE.id = "ios-audio";
      newAE.src = media;
      newAE.type = enctype;
  document.getElementById('ios').appendChild(newAE);

  var player = document.getElementById('ios-audio');
  setTimeout(function() {
    player.play();
    console.log("playing");
    console.log(player);
  }, 50);
}

create('https://ia800508.us.archive.org/15/items/LoveThemeFromTheGodfather/02LoveThemeFromTheGodfather.mp3');
<div id="ios"></div>
  • 0
    Звук не воспроизводится? Потому что, если речь идет только о его появлении в DOM, это не должно иметь значения, если свойство базового элемента в порядке. В противном случае используйте innerHTML чтобы установить именно тот HTML, который вы хотите. См. Stackoverflow.com/q/37735208/215552
  • 0
    Он прекрасно воспроизводит mp3-файлы, но когда получает файл OGG, он проигрывает около 30 секунд, а затем останавливается в iOS Safari. Я предположил, что проблема с Safari была отсутствующим типом?
Показать ещё 9 комментариев
Теги:
audio

1 ответ

2
Лучший ответ

<source> и [type]

Я считаю, что атрибут [type] принадлежит тегу <source>. Тег <audio> может иметь только один атрибут [src] и когда требуется более одного, теги <source> добавляются для каждого [src]. Атрибут [type] необходим для обозначения MIME для нескольких [src].


демонстрация

если демо не работает на SO, просмотрите эту действующую демо на Plunker

var aTag = document.createElement('audio');
aTag.id = 'a0';
aTag.controls = true;

var sMP3 = document.createElement('source');
sMP3.src = 'https://instaud.io/_/2JCu.mp3';
sMP3.type = 'audio/mpeg';

var sOGG = document.createElement('source');
sOGG.src = 'https://instaud.io/_/2Mxg.ogg';
sOGG.type = 'audio/ogg';

aTag.appendChild(sMP3);
aTag.appendChild(sOGG);

document.querySelector('.dock').appendChild(aTag);
<fieldset class='dock'>
  <legend>Audio and Source Tags</legend>
</fieldset>

  • 0
    Что вы подразумеваете под демо не работает на SO ? Как plnkr связан с этим Q / A?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню