预加载声音文件

时间:2012-07-26 21:06:18

标签: javascript jquery html internet-explorer

希望有人可以提供帮助,这让我很生气...

我正在开发一个内部网应用程序,我需要预加载大量(106!)MP3文件。我正在预先加载这些......

for (i=0; i<mp3Files.length; i++) {

    soundSpan = document.createElement("span")

    soundFileLocation = "http://wss/sites/TDABQ/" + mp3Files[i]

    soundSpan.innerHTML="<embed src='" + soundFileLocation + "' hidden='true' autostart='false' loop='false' />"

    document.body.appendChild(soundSpan)
}

这可行,但需要一段时间,但是迟到的加载不是问题。

问题是我无法找出确定所有文件何时加载的方法,以便我可以提示用户页面已准备就绪。

的问题:

  1. 这必须在Internet Explorer 6上运行(是的,真的),以便排除HTML5 /音频

  2. 我无法将任何内容加载到存储此应用程序的服务器上(请不要询问)到目前为止已经排除了SoundManager。我可以让SoundManager在与应用程序位于同一服务器上时工作正常但是尝试从另一台服务器加载SoundManager会导致Flash问题&gt; JS(或它是JS&gt; Flash)安全设置。这些设置无法在客户端PC上更改。

  3. 我尝试过使用JQuery的Ajax和Get方法,但由于某些原因无法让它进行跨域调用Ajax,例如以下代码从不显示警告框

    $(document).ready(function(){

    $。get({url:“http://wss/sites/TDABQ/field1.mp3”,crossDomain:true,success:function(){alert('yes!')}});

    });

  4. 因此我使用Embed标签进行预加载。嵌入标记似乎不响应onLoad或onReadyStateChange事件处理程序。

    我已经没有想法......

    如何找出所有文件的加载时间?

2 个答案:

答案 0 :(得分:0)

AJAX调用不起作用,因为(对于跨域AJAX)JSONP请求是唯一允许的请求。当前示例不是请求JSON,而是请求mp3。您可以请求具有.mp3s路径的JSON文件,但这不会解决您的问题。

我不知道Sound Manager的内部工作原理。我会按照Esailija的建议检查crossdomain.xml

答案 1 :(得分:0)

Ty使用

$("#yourEmbed").bind('load', function(){ 
  alert("Files loaded"); 
});

就绪处理程序无法正常工作,因为只要DOM完全加载就会触发它。