2009-07-14 88 views
0

我正在研究这个Flash项目,并且我构建了一个swf,其中所有资产都被导出到第5帧,并且第一帧包含预加载器。当预加载器完成时,它跳转到实际站点开始的第10帧。这很好。但是,在我已经测试过的每个浏览器(FF,IE,Chrome和Safari)中,当我在网址上放置#时,行为似乎是浏览器首先下载整个swf,然后开始播放最终的结果是swf需要一段时间才能加载(空白屏幕),预加载程序会以100%的速度运行,然后swf会继续运行到该站点。Flash Player深层链接问题

我将不胜感激,如果任何人都可以证实这种行为和任何输入来阐明这个问题。

UPDATE:

感谢rhtx指出这个讨厌的Flash播放器的行为。在某种程度上,我可以理解这是为什么,但它只适用于制作线性电影,而我不这样做。目前这意味着我需要为第一帧上的每个深层链接位置创建一个标签,如果您的路径是内容驱动的,这当然是不可能的。

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

+0

也许你可以检查JS中的URL,如果存在空的散列,则导航到没有散列的相同位置。或者,您可以尝试使用'#/'导航到相同的URL,而不是'#',但我认为这可能最终会产生相同的行为。 – 2009-07-16 15:50:37

+0

你也可以尝试asperous.us的建议。可能会有点笨拙,但至少应该起作用。 – 2009-07-16 15:52:36

回答

1

我的猜测是this bug导致你的问题。一段时间以来,This guy一直在报告这个bug的性质。

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

该错误最近关闭。解决办法:制作一个小的swf预加载器来加载你的主要swf(如asperous.us)。请参阅this s.o. q & a

1

你可以做一个“容器”SWF,其唯一的工作是加载真正的瑞士法郎。这样,如果页面上的swf在运行之前完全加载,那么它并不重要,因为它只有几kb的大小。

+0

这就是我过去在“过去的日子”里所做的。现在我只想用这种方法作为最后的手段。 – Luke 2009-07-16 21:49:20

2

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

认为您的情况可能发生的情况是,由于'#'符号,Flash Player正在寻找锚点。我的猜测是,它一直在寻找,直到整个SWF加载完毕,并且它发现SWF中没有任何锚点可以匹配。

您可以尝试这样的事:

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

希望有所帮助。

+0

现货!但是,这带来了下一个问题。查看我的更新。 – Luke 2009-07-15 22:25:27

1

我已经知道这个错误了一段时间,并使用容器方法来绕过它。但我讨厌容器方法,所以我偶尔在网上搜索解决方案。

Rhtx救援..

不是真的干净,因为它应该的,但即时通讯很高兴它的工作方式..

现在我实现它的方式是我有一个帧标签类型锚点在框架1上被命名为“加载” (框架2是我的应用程序所在的地方)。

然后我用一段JavaScript加载我的Flash网站,基本上做到这一点:这个工作对我来说是我调用一个函数ExternalInterface的(“的setpath”,路径)

//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 ...); 
} 

原因从闪存设置哈希,这反过来也通过谷歌分析的路径。

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