我非常喜欢这个菜鸟,但是当我需要在Safari,Chrome,IE和FireFox中使用它们时,我的.wav文件会播放声音效果甚至重叠,但我仍然唯一的问题是我可以在IE8中设置音量。它只是在原始文件的相同响亮级别播放。这是我的代码(我已尝试注释掉的东西)。
this.load = function( audiofile )
{
var i;
for ( i=0; i<overlapMax; i++ )
{
var object = null;
if ( ie8 )
{
object = document.createElement('div');
var iesound = '';
// adding volume here didn't do anything
// iesound = iesound + '<object id="'+soundID+'track'+i+'" type="audio/x-wav" volume=2 data="'+audiofile+'" width="200" height="16">';
iesound = iesound + '<object id="'+soundID+'track'+i+'" type="audio/x-wav" data="'+audiofile+'" width="200" height="16">';
iesound = iesound + '<param name="src" value="'+audiofile+'" />';
iesound = iesound + '<param name="volume" value="2" />'; // adding volume here didn't do anything iesound = iesound + '<param name="autoplay" value="false" />'; iesound = iesound + '<param name="autostart" value="0" />'; iesound = iesound + '<param name="pluginurl" value="http://www.apple.com/quicktime/download/" />';
iesound = iesound + '</object>';
object.id = soundID+'track'+i+'div';
object.innerHTML = iesound;
object.style.visibility = 'hidden';
object.style.position = 'absolute';
object.style.left = '0px';
object.style.top = '0px';
}
else
{
object = document.createElement('audio');
object.setAttribute('id',soundID+'track'+i);
object.setAttribute('src',audiofile);
}
document.body.appendChild( object );
var newsound = document.getElementById(soundID+'track'+i);
// needs to be handled with a method & params
//
newsound.volume = 0.02; // this sets volume just fine for everything but ie8
tracks.push( newsound );
}
}
答案 0 :(得分:3)
有些人会告诉你不,但你想知道如何最好地采用最广泛的跨浏览器实现在浏览器中播放音乐和声音......
首先,如果您希望在所有浏览器中可靠地运行,这最终是一个Flash问题。
其次,永远不要使用微软专有的JScript innerHTML方法。它不会注册DOM(这是人们使用JavaScript与之交互的浏览器界面)。当你进入JavaScript的应用程序级别时,你将无法与作为一堆文本转储到DOM的任何东西进行交互,它不是文本,而是一个应用程序。使用符合W3C的方法,例如appendChild,insertBefore等。在你和能够可靠地做事情之间会有一个很大的讨厌的隐形墙,在你停止使用innerHTML之前你永远不会出现这种情况。如果生活中的任何事情变得容易,那么每个人都会很开心,以正确的方式做事,并且你变得比其他人更有价值,而且如果你足够谨慎地开始努力,那么以正确的方式坦诚地做事就变得容易了。
第三,您遇到了Internet Explorer错误。问题是,不幸的是,Internet Explorer需要一个名为=“movie”attribute =“value”的param元素,并重复.swf路径。为什么?除此之外,没有任何合乎逻辑的原因是不幸的是Internet Explorer如何工作。
您的对象元素应如下所示......
<object class="left" data="mplayer.swf" style="min-height: 1px; min-width: 1px;" type="application/x-shockwave-flash">
<param name="movie" value="mplayer.swf" />
<param name="loop" value="false" />
<param name="play" value="false" />
<param name="wmode" value="transparent" />
<p>Alternative content, a link to download the Flash plugin in example.</p>
</object>
现在我注意到你正在使用一个wav文件,所以你需要记住,没有Flash Internet Explorer(或任何其他浏览器)的工作将完全依赖于拥有插件的用户设置以处理此文件类型。这意味着像Quick Time这样的例子。这将使用户的体验非常主观于他们已经遇到的事情(如果他们不是非常技术并且没有任何(意志坚定的)技术人员来帮助他们,通常会有大量的垃圾)。/ p>
尽管我不喜欢提倡Flash,但遗憾的是必须真正获得一致的跨浏览器体验。由于Microsoft是MPEG-LA许可转播组的一部分,因此他们仍然不支持HTML5音频/视频元素(只有开放格式是可以接受的,并且它们必须在开箱即用的情况下开箱即用,而用户无需做任何事情就有资格支持这些元素)否则它是一个基于利润的议程的公司。因此,如果不是20世纪30年代(主要与微软对其产品的过度支持相结合),音频/视频元素在2020年就不会很可靠。由于Flash占有接近100%的市场份额,我建议使用它,我有一个跟进来帮助你用一个有效的实例...
我建议你查看John Bezanis的Flash MP3播放器; http://www.bezzmedia.com/swfspot/samples/flash8/Mp3_Player_with_XML_Playlist
您可以通过输入启用音乐来查看在我的网站上运行的修改版本(请参阅我的个人资料中的链接)。我基本上使用JavaScript来处理原始Flash对象中使用的最少Flash脚本。
我很乐意澄清你需要的任何东西。