IE 不支持 as3 预加载器操作

Posted

技术标签:

【中文标题】IE 不支持 as3 预加载器操作【英文标题】:IE not supporting as3 preloader action 【发布时间】:2011-10-04 05:45:22 【问题描述】:

我使用了下面的代码。

停止(); this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoadingAction); this.loaderInfo.addEventListener(Event.COMPLETE, onLoadedAction); this.loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErroAction); 函数 onLoadingAction (e:ProgressEvent):void 跟踪(“加载”); 函数 onLoadedAction (e:Event):void this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, onLoadingAction); gotoAndStop(currentFrame+1); 函数 ioErroAction (e:IOError):void trace("开发本" + e.toString());

此代码支持 chrome 和 firefox。但如果我使用 IE 运行,它会卡在 onLoadingAction。

我需要做什么才能在 IE 中运行?

【问题讨论】:

只是出于好奇,你能输出onLoadingAction的踪迹吗? @goliatone:完整阅读我的问题。 我确实读过它。我只是不明白您所说的卡在 onLoadingAction 是什么意思。我在 IE 中遇到了类似的问题。 卡住的意思是......它没有移动到 COMPLETE 事件处理程序,而是使用 progressEvent 事件处理程序。 检查 Mike Welsh 的答案...效果很好。 【参考方案1】:

不幸的是,根 loaderInfo 的 COMPLETE 事件并不可靠,并且在不同的浏览器中表现不同。如果文件被缓存或在本地运行,它将无法在某些浏览器中触发。

相反,在 ENTER_FRAME 或 TIMER 处理程序中检查 loaderInfo.bytesLoaded == loaderInfo.bytesTotal:

addEventListener(Event.ENTER_FRAME, onEnterFrame);

function onEnterFrame(event:Event):void

    if(loaderInfo && loaderInfo.bytesLoaded == loaderInfo.bytesTotal)
    
        // load complete
    

【讨论】:

不能使用 Progress 事件进行检查吗? 不幸的是,我相信 ProgressEvent 在某些环境中可能会出现无法触发的相同问题。刚才在 IE9 中测试本地 SWF 时,PROGRESS 事件没有触发,即使 COMPLETE 事件触发了。所以,一般来说,我不会信任根 loaderInfo 上的事件,而只会检查 ENTER_FRAME 中的完成情况。 刚刚在 IE10 上使用 Flash 11.8 时遇到了这个问题。在本地硬盘驱动器上打开文件时不会触发进度事件(c:/index.html 加载 c:/movie.swf)。切换到 onEnterFrame 并检查 bytesLoaded 工作正常。谢谢!

以上是关于IE 不支持 as3 预加载器操作的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AS3 中创建预加载器

在 AS3 Flash Builder 中为 SWF 创建预加载器

ActionScript 3 AS3预加载器

ActionScript 3 AS3:预加载器

ActionScript 3 AS3:预加载器代码

ActionScript 3 AS3:第1帧上的预加载器