2012-07-26 103 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