【问题标题】:Trying to hide and show Flash video player with ExternalInterface尝试使用 ExternalInterface 隐藏和显示 Flash 视频播放器
【发布时间】:2011-03-01 20:26:15
【问题描述】:

我正在尝试创建一个包含 Flash 播放器的叠加层,当用户单击链接时会显示该播放器。包含播放器的 div 在 CSS 中以 display:none 开头。点击后会显示 div,JS 会使用 ExternalInterface 来配置和启动播放器。 JS 在捕捉到“Flash 就绪”事件时配置播放器,该事件由 Flash 在ADDED_TO_STAGE 上触发。

除了永远不会创建 ExternalInterface 回调之外,所有这些都有效。如果播放器在页面加载时显示,或者使用visibility:hidden 而不是display:none 隐藏,则JS 和AS3 可以正常工作。我知道that Flash will not be initialized with display:none,这按预期工作:当 Flash 未隐藏时,它会触发其事件并正确初始化其他所有内容(例如 GUI、其他内部内容)。唯一没有按预期发生的是未添加我的 ExternalInterface 回调。

ExternalInterface.available 是真的。这不是时间问题,因为即使在几分钟后回调仍然不存在。最奇怪的是,flash 能够调用 JS,很好地触发 JS 事件,并且触发事件的代码在添加回调的代码之后。任何 AS3 代码都不会引发错误。我在 Chrome 和 Firefox 中都看到了这个问题。

FWIW,由于一些不寻常的要求,我直接编码嵌入 HTML 而不是使用 SWFObject。

有人遇到过display:none 和 ExternalInterface 的此类问题吗?

谢谢!

【问题讨论】:

  • 另外,我已经尝试按照here 的描述设置wmode。没有改变任何东西。
  • 你能发布你的代码吗?这可能是在考虑 DOM 之前触发事件的问题,等等。

标签: javascript html css flash actionscript-3


【解决方案1】:

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

希望对您有所帮助!

【讨论】:

    【解决方案2】:

    结果是我忽略了一些细节问题,认为它们不重要(对不起!)。 Flash 视频的显示/隐藏由 FancyBox 处理,它实际上将隐藏的 HTML 复制到一个新的 div 中并显示该 div。这样就可以了,新创建的播放器能够初始化和触发事件。但是,它使用ExternalInterface.objectID 来引用自己,并且由于 FancyBox,现在 DOM 中有两个具有相同 ID 的元素。因此,像$(#objectId).trigger(...) 这样触发的事件将.target 设置为原始Flash 播放器,该播放器仍处于隐藏状态,因此尚未初始化,也没有我要查找的回调。

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

    <script type="text/html" id="fancyBoxTargetId">[Flash player html]</script>
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      相关资源
      最近更新 更多