我有一个应用程序,需要在一系列行中渲染大约100个Flash图形(以及其他DOM东西),这些行在垂直方向上超出当前可见窗口多次延伸-换句话说,用户必须向下滚动才能看到所有不同的图.
此应用程序也是动态的,当用户更改DOM中的值(在页面上的任意位置)时,它将需要同时将更改传播到所有Flash图.
因此,我设置了所有externalInterface回调,并小心地让任何JS开始运行,直到非常重要的“ flashIsReady”调用为止,并且…在我尝试用新数据更新()现有的swf之前效果很好.
这是行为:
-IE / Fox中的所有swfs加载都(初始)=良好.
-使用新内容更新swfs可以在IE中运行,但不能在Fox中运行=不好
-在Fox中更新具有新内容的swfs的方法-仅在以下条件下-我向下滚动到页面底部,然后回到顶部-之前-我触发了update().
因此,每当一个名为JS的瑞士法郎说“闪存已准备就绪”时,我便开始追踪,然后我意识到,Firfox仅在瑞士法郎变得可见时才对其进行渲染.老实说-很好,实际上,我很确定IE也可以做到这一点.但是问题在于,不仅Firefox不初始化swf,而且Firefox甚至不承认swf存在(如果尚不可见,则在加载后等待).
事实证明,您会看到JS错误:
“ [[FlashDOMID] .FlashMethod不是函数”.
但是,向下滚动一点,等待其可见,然后突然开始显示轨迹
“已准备好闪存”,“已准备好闪存”,一旦它们全部准备就绪,一切就可以正常工作.
有人告诉我FF不会在可见之前初始化swf的-我可以强制执行吗?如果您需要,我可以发布代码…但是它很繁重(很难从其余部分中删除相关的代码),并且(如果您愿意)我希望避免使用它.
问题很简单-您是否曾经发生过这种情况?如果是,您是否找到了解决方案?是否有人现在如何强制尚未显示的瑞士法郎初始化?多谢你们.
经过大量的论坛搜索-我同意,没有优雅的方法可以做到这一点哈哈!我最终寻求的解决方案基本上是为$(document).ready()上的每个swf制作JS对象.
基本上,JS对象将具有各种值,其中包括“ data”和“ isReady”.当一个swf变得可见并且会调用JS说“ im ready”时,我会简单地接住那个调用,然后找到它所引用的JS对象(我设法通过将每个swf的DOM id作为其之一传递给它flashVars;是的,这让我感到肮脏).从那里开始,基本上只是一个游戏,确保在我尝试操作每个JS之前,每个JS都具有“ isReady”.
在整个混乱中,唯一的优雅之处在于,通过使用JS对象,我仍然可以通过简单地更新各自JS对象中的“ data”属性来将新数据应用于“隐藏” swfs.然后,当swf最终变得可见时,我将更新它拥有的所有数据(即当前数据),并且效果很好,但是,我仍然同意这整个情况是不幸的.
所以… *回答.