如何在HTML页面中嵌入自定义皮肤的音频MP3,而不使用Flash,同时还应该部分地在旧版浏览器中工作?
它如果浏览器支持HTML5,则使用HTML5,否则会降级使用flash。最棒的是,它有一个API在两种情况下都能正常工作。我已经在几个项目中使用过这个工具,感觉非常棒。
以下是他们介绍页面上的描述:
问题:浏览器缺乏良好、一致的本机音频支持。(HTML 5的Audio()是未来的趋势,但仍在开发中。)
解决方案:使用HTML5 Audio() + 头文件Flash通过ExternalInterface的Javascript API,在几乎所有地方都可以正常工作。如果支持HTML5但不支持“非免费”的MP3/MP4格式,则使用Flash作为后备。
SoundManager 2包装和扩展了Flash和HTML音频声音API,向Javascript提供单一、统一的声音API;无论最终使用HTML还是Flash播放声音,API都是相同的。(Flash部分是隐藏的,对开发人员和最终用户都是透明的。)
我创建了一个基于Thomas Fuchs文章的JQuery声音插件,由jessegavin提到。您可以在https://github.com/thebentarrow/JQuery-Sound-Plugin找到它。
请使用、滥用和贡献!
我刚刚发现这篇Thomas Fuchs的文章,它介绍了几种在JavaScript中播放音频而不依赖于Flash回退的方法。
移动浏览器
目前没有解决方案,除非声音作为用户操作(点击)的直接结果播放。
支持HTML5 <audio>
元素的浏览器。
需要提供三种不同格式的音频。
if("Audio" in window){
var a = new Audio();
if(!!(a.canPlayType && a.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/, '')))
a.src = "/sounds/ping.ogg";
else if(!!(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, '')))
a.src = "/sounds/ping.mp3";
else if(!!(a.canPlayType && a.canPlayType('audio/mp4; codecs="mp4a.40.2"').replace(/no/, '')))
a.src = "/sounds/ping.m4a";
else
a.src = "/sounds/ping.mp3";
a.autoplay = true;
return;
}
如果你正在处理IE <9
<bgsound src="/sounds/ping.mp3" loop="1" autostart="autostart">
否则测试支持QuickTime、RealPlayer和Windows Media
以下代码使用Prototype.js编写
// this code uses Prototype.js
if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('QuickTime') != -1 }))
Sound.template = new Template('<object id="sound_#{track}_#{id}" width="0" height="0" type="audio/mpeg" data="#{url}"/>');
else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('Windows Media') != -1 }))
Sound.template = new Template('<object id="sound_#{track}_#{id}" type="application/x-mplayer2" data="#{url}"></object>');
else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('RealPlayer') != -1 }))
Sound.template = new Template('<embed type="audio/x-pn-realaudio-plugin" style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>');