2012-07-26 61 views
0

希望有人能帮助,这是推动我疯了......预加载的声音文件

我工作的企业内部网应用程序,我需要预装了大量(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> JS(或它是JS> Flash)安全设置问题。这些设置无法在客户端PC上更改。

  3. 我试过使用JQuery的Ajax和获取方法,但由于某种原因无法让它做Ajax调用跨域例如下面的代码永远不会显示警告框

    $(文件)。就绪(函数(){

    $获得(网址:{url: “HTTP://wss/sites/TDABQ/field1.mp3” crossDomain:true,success:function(){alert('yes!')}});

    });

因此,我使用Embed标签来进行预加载。嵌入代码似乎无法响应onLoad或onReadyStateChange事件处理程序。

我已经江郎才尽......

如何才能知道当所有的文件已加载???

+0

'$(“#yourEmbed”)。ready();'? – 11684 2012-07-26 21:16:19

+0

您是否为SoundManager设置了[crossdomain.xml](http://kb2.adobe.com/cps/142/tn_14213.html)? – Esailija 2012-07-26 21:28:11

+0

@Esailija对不起,但我不熟悉crossdomain.xml。是否将名为crossdomain.xml的文件放置在包含SoundManager文件的服务器的根目录或包含使用SoundManager的网页的服务器的根目录中? – user1555329 2012-07-26 22:00:15

回答

0

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

我不知道Sound Manager的内部工作原理。我会按照Esailija的意见,并使用

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

就绪处理程序不会工作检查的crossdomain.xml

0

泰,因为它一旦DOM完全加载解雇。

+0

感谢您的建议,但恐怕代码似乎什么都不做。我无法使用EMBED标签来使用普通的javascript/DOM或使用JQuery来触发onLoad事件。 – user1555329 2012-07-31 14:20:17