预加载声音文件

Pre-loading sound files

本文关键字:文件 声音 加载      更新时间:2024-03-01

希望有人能帮忙,这让我疯了。。。

我正在开发一个intranet应用程序,需要预加载大量(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. 这必须在InternetExplorer6上工作(是的,真的),这样就排除了HTML5/Audio

  2. 我无法将任何内容加载到存储该应用程序的服务器上(不要问),这已经排除了SoundManager的可能性。当SoundManager与应用程序在同一台服务器上时,我可以让它正常工作,但试图从另一台服务器加载SoundManager会导致Flash>JS(或者是JS>Flash)安全设置出现问题。这些设置不能在客户端电脑上更改。

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

    $(document).ready(function){

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

    });

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

我没什么想法了。。。

我如何知道所有文件何时加载???

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

我不知道声音管理器的内部工作原理。我会听从Esailija的建议,检查crossdomain.xml

Ty使用

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

ready处理程序不起作用,因为一旦DOM完全加载,它就会被激发。