2013-05-17 3 views
0

Просто быстрое редактирование на основе отзывов: большая часть этой проблемы - моя неопытность. Если вы можете дать мне несколько советов о том, как исследовать/отлаживать, я бы очень благодарен. Еще раз спасибо. НайлHTML5 Audio Safari Woes

У меня есть эта функция/плагин для воспроизведения звуков, когда элемент щелкнул:

(function($){ 
    $.fn.attachSound = function (soundSrc) 
    { 
    return this.each(function(index){ 
     var audioElement = document.createElement('audio'); 
     if (audioElement.canPlayType('audio/mpeg') == '') 
     { 
     soundSrc = soundSrc.replace('.mp3','.ogg'); 
     } 
     audioElement.setAttribute('src', soundSrc); 
     $(this).click(function() { 
     audioElement.play(); 
     }); 
    }) 
    } 
})(jQuery); 

А вот пример того, как я это называю:

$(document).ready(function(){ 
    $('#laughter-button').attachSound('sounds/laughter-elf.mp3'); 
    $('#laughter-button2').attachSound('sounds/laughter-santa.mp3'); 
}) 

До сих пор он работает в Chrome , FF, Opera и Safari (все текущие версии, я пока не тестировал IE). Проблема, с которой я столкнулась, находится в Safari, она работает только для первого пользователя. Один из способов, которым я хотел использовать эту функцию, был частью звуковой памяти, так что она не будет делать. Есть идеи?

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

Спасибо, Найла

+0

К сожалению сказать, но, на мой взгляд, новый "Большой HTML5 Audio/Video API" не так велика. Если вам нужна хорошая совместимость с перекрестным браузером, вам лучше всего полагаться на плагин, который был около нескольких лет. Я лично тестировал каждую функцию этого нового api, и если бы я нашел время, я мог бы найти вашу проблему, но факт в том, что это просто дерьмово и не стоит траты времени или головной боли. Возможно, они исправит его с помощью HTML6. lol – SpYk3HH

+0

@ SpYk3HH Спасибо! Я буду следить за HTML6! –

+0

да, извините, я не могу быть более полезным прямо сейчас. возможно, в эти выходные. прямо сейчас у меня болит голова, и просто думать о HTML5 аудио api делает его хуже, LOL – SpYk3HH

ответ

0

Я понял, компромиссное решение. Это решение создает новый звук для каждого клика, а не только на document.ready. Недостатком является то, что он менее эффективен, но по крайней мере он работает в Safari. И есть способы, которыми я могу это улучшить. Прямо сейчас, хотя я достаточно доволен этим решением просто потому, что он работает. Сказав это, я, безусловно, открыт для лучших решений, если вы можете подумать об одном. Я, вероятно, в конечном итоге попытаюсь объединить этот код с обнюхиванием браузера или чем-то еще. Спасибо всем, кто заставил меня по-разному думать о проблеме. Найл

(function($){ 
    $.fn.attachSound = function (soundSrc) 
    { 
    return this.each(function(index){ 
     $(this).click(function() { 
     var audioElement = document.createElement('audio'); 
      if (audioElement.canPlayType('audio/mpeg') == '') 
      { 
      soundSrc = soundSrc.replace('.mp3','.ogg'); 
      } 
     audioElement.setAttribute('src', soundSrc); 
     audioElement.play(); 
     }); 
    }) 
    } 
})(jQuery);