Flash Player深层链接问题

时间:2009-07-14 05:24:46

标签: flash actionscript-3 preloader

我正在研究这个Flash项目,我构建了一个swf,其中所有资源都导出到第5帧,第一帧包含预加载器。当预加载器完成时,它跳转到实际站点开始的第10帧。这很有效。

然而,在我到目前为止测试的每个浏览器(FF,IE,Chrome和Safari)中,当我在网址上放置#时,行为似乎是浏览器首先下载整个swf,然后开始播放它最终结果是swf加载需要一段时间(空白屏幕),预加载器开始100%,然后swf继续到现场。

如果有人能够确认这种行为以及任何可以解决这个问题的意见,我将不胜感激。

更新

感谢rhtx指出这个恼人的Flash Player行为。在某种程度上,我可以理解为什么会这样,但只有你制作线性电影才有效,但我不这样做。目前,这意味着我需要为第一帧上的每个深层链接位置创建一个标签,如果您的路径是内容驱动的,那当然是不可能的。

有没有办法克服第二个问题?

4 个答案:

答案 0 :(得分:2)

当URL中有#时,编写和读取本地SharedObjects时遇到了一个非常疯狂的问题。这是痛苦的,我无法完全把它钉死。与您正在处理的内容不同,但我可以确认在某些情况下,当URL中存在“#”时,FP可能会有不同的行为。

认为在您的情况下可能发生的事情是Flash Player正在寻找一个锚,因为'#'符号。我的猜测是它一直在寻找,直到整个SWF加载,并且它看到SWF中的任何地方都没有锚,以便与之匹配。

您可以尝试这样的事情:

在主时间轴上的FLA中添加一个新图层。在第一帧上,创建一个锚点(添加关键帧,命名框架并在命名时选择“锚点”选项)。尝试再次加载页面,但在哈希符号后面添加锚点的名称。如果它按需要加载,那么我可能会猜到一些东西。

希望有所帮助。

答案 1 :(得分:1)

你可以制作一个“容器”swf,其唯一的工作就是加载真正的swf。这样,如果页面上的swf在运行之前完全加载就没关系,因为它的大小只有几kb。

答案 2 :(得分:1)

我猜是this bug导致你出现问题。 This guy已经暂时报告了此漏洞的性质。

虽然听起来你没有使用flex,但如果这个bug也会影响纯粹的闪光,我也不会感到惊讶。

该错误最近已经关闭。解决方案:制作一个小型swf预加载器来加载你的主swf(如asperous.us)建议。

另见this s.o. q & a

答案 3 :(得分:1)

我现在已经知道这个bug了,并使用容器方法来规避它。但我讨厌容器方法,所以我偶尔会在网上搜索解决方案。

Rhtx救援..

不是那么干净,但我很高兴它的工作方式......

我现在实现它的方式是我有一个名为“loading”的帧标签类型锚 在第1帧(第2帧是我的申请所在的地方)。

然后我使用一段javascript加载我的Flash网站,基本上这样做:

//pseudo javascript
var path = "";
function buildFlash() {
   path = location.hash.length > 1 ? location.hash.substr(1) : "";
   location.hash = "loading";
   $(document).ready(onDOMReady); //could probably directly load the swf now
}

function onDOMReady() {
   swfobject.embedSWF(... with path flashvar ...);
}

这对我有用的原因是我从flash调用函数 ExternalInterface(“setPath”,path)来设置哈希值,而哈希值又将路径传递给googleanalytics。

访问网址http://www.site.com/#about/的人会在网站加载时看到网址/#加载,加载完成后,Flash应用程序会确定用户应该去哪里并相应更改网址。