Flash播放器在初始页面浏览时加载,但在缓存时加载不完整

时间:2009-09-04 19:37:20

标签: flash actionscript-3

我有一个奇怪的Flash播放器问题,这似乎在FireFox(3.0和3.5,在PC上)最明显。

访问页面:http://prnewswire.com/container/tgifridays/tgifridayssocialmedianewsrelease-woody-jackdaniels/

在初始页面加载时,您应该会看到一个带有暂停视频的Flash视频播放器,当您将鼠标悬停在视频上时,您会看到一些视频控件。

现在进入地址栏,然后按地址栏末尾的回车键“重新加载”页面。现在flash播放器只会显示播放器的滚动条。它没有完全加载。

如果按下浏览器的刷新按钮,则可以正确加载整个内容。但是再次按下地址栏内的“回车”键,它将返回仅加载滚动条。

我认为问题来自浏览器加载播放器的缓存版本与新版本的播放器。但有什么区别?

播放器非常动态 - 文档类加载flashvars,告诉它加载XML文件的路径,XML文件加载缩略图和视频。一个实例Player()类被添加到舞台(它只是视频窗口和视频控件),然后文档类向它发送一个视频来加载和播放。

我很确定这与时间有关。缓存的文件可能加载太快了?但是为了什么,我不知道。

如果您提供电子邮件地址,我可以通过电子邮件发送电子邮件

3 个答案:

答案 0 :(得分:1)

没有代码很难说,但我的猜测是你是对的并且这是一个时间问题 - 或许你正在处理的事件之一需要用稍后发生的不同事件替换。例如,如果您不小心尝试在PROGRESS事件中读取XML数据,它可能会成功并且无法预测地失败,尽管它可能不那么简单。

我的建议是将一些调试信息添加到文件中(如内容顶部的文本字段),并在用于控制初始化流程的所有事件处理程序中跟踪消息。也就是说,你在那里阅读flashvars,以及处理XML的地方,等等。找出它正在破坏的阶段,并调查你正在收听的事件是否可以用更合适的事件替换。

尝试的另一件事是添加一些带有类似调试消息的try..catch语句。虽然如果您正在使用调试播放器进行测试,但您应该看到任何未捕获的异常的错误消息。

答案 1 :(得分:0)

如果你希望XML永远不会缓存(使用动态xml,这可能是一个好主意)然后使用like this

答案 2 :(得分:0)

所以这就是发生的事情......

我在AS3中使用预加载器来确定swf本身何时加载。我把它作为文档类的构造函数中的第一行:

this.loaderInfo.addEventListener (Event.COMPLETE, initPlayer);

出于某种原因,当你从PC上的firefox中的缓存加载swf时,Event.COMPLETE永远不会触发,可能是因为该文件已经被认为是在那时被加载了? (它仍然在其他浏览器中触发,因此我不确定这是否是一个错误)。因此,当您在Firefox的地址栏中按“enter”时,它会从缓存中加载swf,并且事件永远不会发生。

但是,Firefox似乎每次都会触发Event.INIT事件,所以这就是我解决问题的方法:

在我的文档类构造函数中:

this.loaderInfo.addEventListener (Event.INIT, onInit);
this.loaderInfo.addEventListener (Event.COMPLETE, initPlayer);

onInit功能:

private function onInit(e:Event):void {
        //if file is already loaded via cache, bytesLoaded should equal bytesTotal
    if(this.loaderInfo.bytesLoaded >= this.loaderInfo.bytesTotal){
        this.loaderInfo.removeEventListener(Event.INIT, onInit);
        this.loaderInfo.removeEventListener(Event.COMPLETE, initPlayer);
        initPlayer(e);
     }      
}