Flash SWF直到可见才初始化 - 我可以强制它们初始化吗?

时间:2010-05-04 20:33:27

标签: jquery actionscript-3 firefox externalinterface

我有一个应用程序需要在一系列行中渲染大约100个闪存图(以及其他DOM东西),这些行垂直延伸超出当前可见窗口的许多倍 - 换句话说,用户必须向下滚动才能看到看到所有不同的图表。

此应用程序也是动态的,当用户更改DOM中的值(页面上的任何位置)时,它需要同时将该更改传播到所有Flash图形。

所以我设置了所有的externalInterface回调,并且小心不要让任何JS开始进行,直到非常重要的“flashIsReady”调用...并且它工作得很好,直到我尝试用新的更新()现有的swf数据

这是行为: - IE / Fox中的所有swfs加载(最初)=好。 - 使用新内容更新swfs在IE中工作但在Fox中不起作用=不好 - 使用新内容更新swfs在Fox中工作 - 只有IF--我向下滚动到页面底部,然后回到顶部 - 之前 - 我触发了更新()。

所以那时我开始追踪一个名为JS的swf说“flash已经准备好”并且我意识到,Firfox只会在swfs变为可见时呈现swfs。说实话 - 这很好,实际上,我很确定IE也会这样做。但问题是Firefox不仅没有初始化swf,Firefox甚至不承认swf存在(预期onload之后),如果它尚未可见。

证明你得到JS错误说:

“[FlashDOMID] .FlashMethod不是函数”。

然而,向下滚动一点,等到它可见,突然间迹线开始亮起

“Flash Ready”,“Flash Ready”,“Flash Ready”,一旦准备就绪,一切正常。

有人告诉我,FF直到可见才会初始化swf - 我可以强行吗?我可以发布代码,如果你需要...但它很重(很难从其余部分中删除相关内容),如果可能的话,我想避免它(为了你的缘故)。

问题很简单 - 您是否已经发生这种情况?如果是这样,您是否找到了解决方案?现在有人如何强制一个尚未可见的swf进行初始化?谢谢你们。

3 个答案:

答案 0 :(得分:3)

因此...

经过大量的论坛搜索 - 我同意,没有优雅的方式来做到这一点哈哈!我最终选择的解决方案基本上是为$(document).ready()上的每个swf制作JS对象。

基本上,JS对象会有各种值,其中包括“data”和“isReady”。当一个swf变得可见并且会调用JS说“im ready”时我会简单地捕获该调用,然后找到它所引用的JS对象(我设法通过将每个swf的DOM id作为其中一个来传递flashVars;是的,这让我觉得很脏。从那里起,它基本上只是一个游戏,以确保每个JS在我尝试操作之前都有“isReady”。

在这整个混乱中唯一的优雅是通过使用JS对象,我仍然可以通过简单地更新各自JS对象中的“data”属性将新数据应用于“隐藏”swfs。然后,当一个swf最终变得可见时,我只会更新它所拥有的任何数据(即当前数据)并且它工作得很好但是,我仍然同意这整个情况是不幸的。

所以... *回答。

答案 1 :(得分:1)

我知道这可能是一个迟到的答案。

但是你需要将你的wmode从opaque更改为wmode =“window”,这就是为什么它在firefox中不能正常工作,IE也是同样的事情,但仅限于第一页加载。

将wmode设置为opaque会导致firefox在浏览器查看之前不会初始化swf。但是,这对所有浏览者来说都不一样。 IE只在第一页视图中使用它,chrome和safari根本没有这样做。

不幸的是,我发现这个问题正好相反。我试图让播放器不在所有浏览器中初始化,直到它在浏览器中可见。

答案 2 :(得分:-1)

除了在页面初始化后重新定位元素之外,我从来没有真正找到强制闪存加载的好方法,强制加载开始然后再次隐藏它们(便宜又讨厌,但似乎有用)。

将所有flash元素放置在页面的左上角(以确保它们在页面加载时可见)然后使用javascript中的pageLoad函数根据需要重新定位页面下方的元素。 Jquery允许您使用addClass()和removeClass()函数

轻松完成所有操作