我正在尝试创建一个包含flash播放器的覆盖图,当用户单击链接时会显示该播放器。在CSS中,包含播放器的div以display:none开头。点击后,将显示div,JS将使用ExternalInterface配置并启动播放器。JS会在捕获到"flash ready“事件时配置播放器,该事件由ADDED_TO_STAGE上的Flash触发。
除了永远不会创建ExternalInterface回调之外,所有这些都是有效的。如果播放器在页面加载时显示,或者用visibility:hidden而不是display:none隐藏,则JS和AS3可以很好地工作。我知道that Flash will not be initialized with display:none,这是预期的:当闪存被取消隐藏时,它会触发它的事件并正确地初始化其他所有东西(例如。GUI,其他内部的东西)。唯一没有按预期发生的事情是我的ExternalInterface回调没有被添加。
ExternalInterface.available是真的。这不是时间问题,因为即使在几分钟之后,回调仍然不存在。最奇怪的是,flash能够调用JS,可以很好地触发JS事件,并且触发事件的代码位于添加回调的代码之后。任何AS3代码都不会抛出错误。我在Chrome和Firefox中都看到了这个问题。
顺便说一句,由于一些不寻常的要求,我直接编码嵌入的超文本标记语言,而不是使用SWFObject。
有没有人在使用display:none和ExternalInterface时遇到过这样的问题?
谢谢!
发布于 2011-03-03 05:12:47
这被证明是一个问题,因为我忽略了一些细节,认为它们不重要(对不起!)。Flash视频的显示/隐藏是由FancyBox处理的,它实际上将隐藏的超文本标记语言复制到一个新的div中并显示该div。这就是它的工作原理,新造的玩家能够初始化和触发事件。但是,它使用ExternalInterface.objectID来引用自己,并且由于FancyBox,DOM中现在有两个具有相同ID的元素。因此,像$(#objectId).trigger(...)这样被触发的事件将.target设置为原始的Flash player,该播放器仍然是隐藏的,因此没有初始化,也没有我想要的回调。
我通过将fancybox的HTML放在一个HTML脚本标记中解决了这个问题:
<script type="text/html" id="fancyBoxTargetId">[Flash player html]</script>这防止了DOM中有两个具有相同ID的元素(无论如何都很好),并允许闪存使用ExternalInterface.objectID进行自我引用。
发布于 2011-03-03 04:59:14
我以前也遇到过addCallBack的问题。我最终做的是让Flash在JS中调用init()函数,然后在该init中设置和传输变量。
希望这能有所帮助!
https://stackoverflow.com/questions/5159922
复制相似问题