Звуковые уведомления в Opera

Я пытаюсь воспроизвести audio элемент в Opera 12.16 (последняя версия прямо сейчас), и я заметил, что он не работает с mp3 файлами, но он работает с ogg .

Вот моя скрипка в настоящее время только с mp3-файлом и НЕ работает над Opera: http://jsfiddle.net/hMnsd/1/

Решение похоже на что-то подобное (как указано на веб-сайте w3c ):

  

Я использую эту функцию для генерации звука:

 function notificationSound(){ var audioElement = document.createElement('audio'); audioElement.setAttribute('src', "http://"+ document.domain +"/files/notification2.mp3"); audioElement.setAttribute('type', 'audio/mpeg'); audioElement.setAttribute('autoplay', 'autoplay'); //audioElement.load() audioElement.addEventListener("load", function() { audioElement.play(); }, true); } 

Чтобы добавить файл ogg я попытался создать необходимую структуру без успеха:

 var audioElement = document.createElement('audio'); var audioSource1 = document.createElement('source'); var audioSource2 = document.createElement('source'); //mp3 file audioSource1.setAttribute('src', "http://"+ document.domain +"/files/notification2.mp3"); audioSource1.setAttribute('type', 'audio/mpeg'); //ogg file audioSource2.setAttribute('src', "http://"+ document.domain +"/files/notification2.ogg"); audioSource2.setAttribute('type', 'audio/ogg'); audioElement.setAttribute('autoplay', 'autoplay'); audioElement.append(audioSource2); //opera audioElement.append(audioSource1); //audioElement.load() $.get(); audioElement.addEventListener("load", function() { audioElement.get(0).play(); }, true); 

Как это сделать, чтобы заставить его работать и в Opera с ogg файлами?

Используйте обнаружение функций вместо обнаружения браузера:

 function isMpeg() { var a = document.createElement('audio'); return !!(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, '')); } function isOgg() { var a = document.createElement('audio'); return !!(a.canPlayType && a.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/, '')); } function isAAC() { var a = document.createElement('audio'); return !!(a.canPlayType && a.canPlayType('audio/mp4; codecs="mp4a.40.2"').replace(/no/, '')); } alert(isMpeg()); alert(isOgg()); alert(isAAC()); 

Пример: http://jsfiddle.net/Cy9AT/1/

Также см .: http://diveintohtml5.info/everything.html

Или используйте Модернизатор

Я бы проверил, какой браузер используется пользователем, а затем выберите источник.

 var audioElement = document.createElement('audio'); if (navigator.userAgent.search("MSIE") >= 0) { audioSource1.setAttribute('src', "http://" + document.domain + "/files/notification2.mp3"); audioSource1.setAttribute('type', 'audio/mpeg'); } else if (navigator.userAgent.search("Chrome") >= 0) { audioSource2.setAttribute('src', "http://" + document.domain + "/files/notification2.ogg"); audioSource2.setAttribute('type', 'audio/ogg'); } else if (navigator.userAgent.search("Firefox") >= 0) { audioSource2.setAttribute('src', "http://" + document.domain + "/files/notification2.ogg"); audioSource2.setAttribute('type', 'audio/ogg'); } else if (navigator.userAgent.search("Safari") >= 0 && navigator.userAgent.search("Chrome") < 0) { audioSource1.setAttribute('src', "http://" + document.domain + "/files/notification2.mp3"); audioSource1.setAttribute('type', 'audio/mpeg'); } else if (navigator.userAgent.search("Opera") >= 0) { audioSource2.setAttribute('src', "http://" + document.domain + "/files/notification2.ogg"); audioSource2.setAttribute('type', 'audio/ogg'); } audioElement.setAttribute('autoplay', 'autoplay'); audioElement.addEventListener("load", function () { audioElement.play(); }, true); 

Надеюсь, я правильно понимаю ваш вопрос.