2012-07-19 62 views
0

我正在使用下面的預加載器AS3代碼。它不工作! 當我在Flash CS5.5上執行時可以正常工作,但不能在線。預加載器閃存AS3它不再工作[GZIP問題]

var l:Loader = new Loader(); 
l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loop); 
l.contentLoaderInfo.addEventListener(Event.COMPLETE, done); 
l.load(new URLRequest("movie.swf")); 

function loop(e:ProgressEvent):void 
{ 
    var perc:Number = e.bytesLoaded/e.bytesTotal; 
    percent.text = Math.ceil(perc*100).toString(); 
} 

function done(e:Event):void 
{ 
    removeChildAt(0); 
    percent = null; 
    addChild(l); 
} 

我發現問題和解決方案!

問題是因爲我的在線服務器上有Apache的mod_deflate選項的gzip。

mod_deflate模塊提供了DEFLATE輸出過濾器,它允許服務器的輸出在通過網絡發送到客戶端之前被壓縮。

所以movie.swf被壓縮了gzip。這是一個很大的問題。

這裏的解決方案:

好了,只需要創建或把一些代碼到.htaccess文件在服務器根目錄文件夾。

創建一個文件(或者把這個代碼進入)的.htaccess

SetEnv no-gzip dont-vary 

# Don't compress images/flash 
SetEnvIfNoCase Request_URI \ 
\.(?:gif|jpe?g|png|swf|flv)$ no-gzip dont-vary 

玩得開心:P

+1

什麼具體不工作?另外我不認爲將'percent'設置爲'null'是你想要在那裏做的。 – Marty 2012-07-19 23:05:33

回答

0

如果它不聯機工作,但本地工作,那麼這裏的一些好的地方開始。

  1. 確保您的文件在您的應用程序認爲它是
  2. 從您的網絡設置都設置爲遠程和本地不閃光輸出時確保現場。要檢查它,請轉到「發佈設置」,然後選擇「閃存」選項卡,然後轉到其中顯示「本地播放安全性」的高級部分。

最好聽取錯誤,而不僅僅是裝載機上的進度/完整事件,然後您可以更輕鬆地找出這些問題。

IOErrorEvent.IO_ERROR and SecurityErrorEvent.SECURITY_ERROR聽衆會確認上述可能的問題。

0

問題是,當您在線上載該程序時,該程序嘗試訪問您上傳的網站上的movie.swf文件。因此,movie.swf到你自己的域名,然後粘貼它的網址。如果你有機會到服務器的.htaccess文件,但是如果你不這樣做 例如爲:

l.load(new URLRequest("http://mysite.com/movie.swf")); 
0

您的解決方案的偉大工程。我發現我可以通過向我的HTTP請求添加一個頭來解決這個問題。默認情況下,IE將有一個名爲「Accept-Encoding」的請求頭,設置爲「gzip,deflate」。你可以覆蓋它並將其值設置爲「x」或其他。除「gzip」之外的任何內容

例如。

var header:URLRequestHeader = new URLRequestHeader(「Accept-Encoding」,「xxx」);

var request:URLRequest = new URLRequest(「http://www.whatever.com/myfile.zip」); 請求。requestHeaders = [header];

var loader:Loader = new Loader(); loader.load(request);