首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ExternalInterface隐藏和显示Flash视频播放器

问用ExternalInterface隐藏和显示Flash视频播放器
EN

Stack Overflow用户
提问于 2011-03-02 04:26:16
回答 2查看 1.7K关注 0票数 2

我正在尝试创建一个包含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时遇到过这样的问题?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-03 05:12:47

这被证明是一个问题,因为我忽略了一些细节,认为它们不重要(对不起!)。Flash视频的显示/隐藏是由FancyBox处理的,它实际上将隐藏的超文本标记语言复制到一个新的div中并显示该div。这就是它的工作原理,新造的玩家能够初始化和触发事件。但是,它使用ExternalInterface.objectID来引用自己,并且由于FancyBox,DOM中现在有两个具有相同ID的元素。因此,像$(#objectId).trigger(...)这样被触发的事件将.target设置为原始的Flash player,该播放器仍然是隐藏的,因此没有初始化,也没有我想要的回调。

我通过将fancybox的HTML放在一个HTML脚本标记中解决了这个问题:

代码语言:javascript
复制
<script type="text/html" id="fancyBoxTargetId">[Flash player html]</script>

这防止了DOM中有两个具有相同ID的元素(无论如何都很好),并允许闪存使用ExternalInterface.objectID进行自我引用。

票数 0
EN

Stack Overflow用户

发布于 2011-03-03 04:59:14

我以前也遇到过addCallBack的问题。我最终做的是让Flash在JS中调用init()函数,然后在该init中设置和传输变量。

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5159922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档