Javascript 预加载声音文件
希望有人能帮上忙,这让我发疯 我正在开发一个intranet应用程序,需要预加载大量(106!)MP3文件。我正在像这样预加载这些Javascript 预加载声音文件,javascript,jquery,html,internet-explorer,Javascript,Jquery,Html,Internet Explorer,希望有人能帮上忙,这让我发疯 我正在开发一个intranet应用程序,需要预加载大量(106!)MP3文件。我正在像这样预加载这些 for (i=0; i<mp3Files.length; i++) { soundSpan = document.createElement("span") soundFileLocation = "http://wss/sites/TDABQ/" + mp3Files[i] soundSpan.innerHTML="<em
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)
}
用于(i=0;i JS(或者是JS>Flash)安全设置。无法在客户端PC上更改这些设置
我尝试过使用JQuery的Ajax和Get方法,但由于某些原因,无法让它跨域执行Ajax调用,例如,下面的代码从未显示警告框
$(文档).ready(函数(){
$.get({url:http://wss/sites/TDABQ/field1.mp3,crossDomain:true,success:function(){alert('yes!'})
}))
因此,我使用嵌入标记进行预加载。嵌入标记似乎不响应onLoad或onReadyStateChange事件处理程序
我已经没有主意了
如何确定何时加载了所有文件?AJAX调用不起作用,因为(对于跨域AJAX)JSONP请求是唯一允许发出的请求。当前示例不是请求JSON,而是请求mp3。您可以请求具有.mp3路径的JSON文件,但这并不能解决您的问题
我不知道Sound Manager的内部工作原理。我会按照Esailija的建议,使用
$("#yourEmbed").bind('load', function(){
alert("Files loaded");
});
ready处理程序无法工作,因为它会在DOM完全加载后立即启动。您设置SoundManager了吗?@Esailija很抱歉,我不熟悉crossdomain.xml。我是否将名为crossdomain.xml的文件放在包含SoundManager文件的服务器根目录下,还是放在包含使用该文件的网页的服务器根目录下SoundManager?@user1555329您可以将其放在您试图从中检索mp3文件的位置。以下是您还设置了allowScriptAccess=“always”的更多信息
在flash的html上?@11684我不认为您可以将JQuery的.ready方法应用于单个对象,我认为它只是在DOM就绪发生时触发的。无论如何,我尝试过它,它似乎总是执行代码,即使是不存在的嵌入对象!@user1555329您不能,它将与DOM就绪相同。$(任何内容).ready
将始终保持DOM就绪状态。这只是用于加载jQuery的文档。您甚至无法将其他文档传递给它。您最好的办法是让flash正常工作,因为嵌入元素不支持onload。您可以在google上搜索SoundManager跨域问题,因为它是一个非常流行的库。我要睡觉了。感谢您的支持这是我的建议,但我担心代码似乎什么也做不了。我无法使用普通javascript/DOM或JQuery获取嵌入标记来触发onLoad事件。