我有一个swf文件,在IE上行为奇怪。事情是在第一次加载后查看页面时不会绘制某个矩形。它只出现在IE中,快速解决方法是在每个请求中使swf的路径唯一,这样它就不会被缓存。每次我的对象都会被绘制出来。
代码很简单
public function drawStage() { var bgRect:Shape = new Shape(); bgRect.graphics.beginFill(0x5F5F5F); bgRect.graphics.drawRect(0,84, stage.stageWidth, 115); bgRect.graphics.endFill(); bgRect.alpha = 0; addChild(bgRect); Tweener.addTween(bgRect, { alpha: 1, time: 1 }); }
在我的构造函数中调用。全班可以在这里看到:http://katuaq.wwwdev.punktum.gl/flash/bioteaser.txt,swf住在这里:http://katuaq.wwwdev.punktum.gl/。
正如你现在可能已经想到的那样,这是图像背后的灰色背景,不会在IE中刷新。
答案 0 :(得分:1)
不要从构造函数中调用drawStage。在构造函数中为ADDED_TO_STAGE事件设置侦听器,并从此事件的处理程序中调用drawStage。此外,当用户使用浏览器缩放功能时,您可能会发现舞台尺寸发生变化,因此请听取RESIZE事件并采取相应的行动。
答案 1 :(得分:0)
IE使用缓存的swf做了一些奇怪的事情,这使得前几帧的stageWidth错误。解决方案是要么在读取该值之前稍等一会儿,要么只使用一组数字。
答案 2 :(得分:0)
这绝对是一个众所周知的问题。在刷新时,阶段。{SIZES}在IE中设置为0。您可以添加一个监听器(输入框架或调整大小),检查大小是否为“非零”:
stage.addEventListener(Event.RESIZE, onResize);
stage.dispatchEvent(new Event(Event.RESIZE));
function onResize(event:Event):void
{
if (stage.stageHeight > 0 && stage.stageWidth > 0)
{
stage.removeEventListener(Event.RESIZE, resizeHandler);
}
}
此外,您应该知道在某些浏览器中无法正确处理大量事件:
http://www.actionscript.org/forums/showthread.php3?t=136345&highlight=timeline+preloader
答案 3 :(得分:0)
这是缓存和Internet Explorer的一个已知问题。
最简单的解决方案是你现在拥有的解决方案。使swf路径独一无二。否则,您不必对动作脚本代码进行模糊处理。
请注意,将图像加载到闪存中时也会出现此问题。如果一旦加载,您可能会遇到IE问题。在那里你必须使图像的路径独一无二。