【问题标题】:Flash SWF not initializing until visible - can I force them to initialize?Flash SWF 直到可见才初始化 - 我可以强制它们初始化吗?
【发布时间】:2011-02-15 15:52:51
【问题描述】:

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

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

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

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

然后我开始跟踪每次 swf 调用 JS 说“flash 已准备好”,我意识到,Firfox 仅在 swf 变得可见时才呈现它们。老实说,这很好,实际上,我很确定 IE 也会这样做。但问题是,Firefox 不仅不初始化 swf,而且如果 swf 尚不可见,Firefox 甚至都不承认 swf 存在(预计在 onload 之后)。

证明是你得到 JS 错误说:

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

但是,向下滚动一点,等到它可见,然后轨迹突然开始亮起

“Flash Ready”、“Flash Ready”、“Flash Ready”,一旦它们都准备好,一切正常。

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

问题很简单——你有没有遇到过这种情况,如果有,你找到解决办法了吗?有谁现在如何强制一个不可见的 swf 进行初始化?谢谢各位。

【问题讨论】:

    标签: jquery actionscript-3 firefox externalinterface


    【解决方案1】:

    所以...

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

    基本上,JS 对象会有不同的值,其中有“data”和“isReady”。当一个 swf 变得可见并调用 JS 说“我准备好了”时,我会简单地捕获该调用,然后找到它所指的 JS 对象(我设法通过将每个 swf 的 DOM id 作为它的一个传递来做到这一点flashVars;是的,它让我觉得很脏)。从那里开始,它基本上只是一个游戏,以确保在我尝试操作之前每个 JS 都有“isReady”。

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

    所以... *回答了。

    【讨论】:

      【解决方案2】:

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

      但是您需要将 wmode 从 opaque 更改为 wmode="window",这就是为什么它在 firefox 中无法正常工作的原因,IE 也是如此,但仅在第一页加载时。

      将 wmode 设置为 opaque 会导致 firefox 在浏览器查看之前不会初始化 swf。但是,并非所有浏览器都一样。 IE 只在第一页查看,chrome 和 safari 根本不这样做。

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

      【讨论】:

        【解决方案3】:

        除了在页面初始化后重新定位元素,强制加载开始然后再次隐藏它们之外,我从未真正找到强制加载 flash 的好方法。

        将所有 Flash 元素放在页面的左上角(以确保它们在页面加载时可见),然后使用 javascript 中的 pageLoad 函数根据需要重新定位页面下方的元素。 Jquery 让您使用 addClass() 和 removeClass() 函数非常轻松地完成这一切

        【讨论】:

          猜你喜欢
          • 2020-09-17
          • 2022-08-23
          • 2019-05-12
          • 1970-01-01
          • 2010-11-06
          • 2016-12-06
          相关资源
          最近更新 更多