2012-07-19 36 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);