在 flash 9 swf 上显示内容?
题
我有一个需要 flash 9 的 swf,并且我正在尝试在其上显示内容。为了实现这一点,我将 wmode 设置为透明。问题是,这仅在用户安装了 flash 10 时才有效,而且我真的不想需要 flash 10 来查看我正在处理的网站上的内容。当我使用 flash 9 在 flash 内容上拉出一个 div 时,swf 会渗入或完全覆盖该 div。
如何在不将 flash 10 设为用户要求的情况下防止这种情况发生?
我使用 swfobject 嵌入 swf 和 jquery-ui 以在 Flash 内容上显示 div。
编辑:
此失败行为仅在 Safari 中出现。
解决方案
我不确定这是否会对您本身有帮助。但我使用以下方法通过 Flash 显示内容。
我前段时间遇到过这个问题。我要向用户显示一个弹出窗口,显示网站注册的条款和条件。弹出窗口正常,但页面顶部有一个 Flash 影片,隐藏了对话框的上部部分。经过测试并广泛使用的方法是将 Iframe 放置在您想要显示内容的位置,并绝对定位您的内容和 IFrame。例如,如果您想在 Flash 影片上方显示 div,请按如下方式放置 IFrame:
<iframe style="position:absolute;top:250;left:150;"></iframe>
然后将 div 放置在该 iframe 的正上方,如下所示:
<div style="position:absolute;top:250;left:150;"></div>
我在页面上使用 jquery 使用 ui.dialog 插件显示对话框。经过一段时间的闲逛后,我设计了以下简单的解决方案。
1) 在 movie 元素上放置 id 属性来唯一标识 movie 对象。喜欢,
<object id="movie1"></object>
2) 在显示对话框(或其他相关内容)之前调用 JavaScript 函数来隐藏影片。喜欢,
$("#movie1").css("display","none");
3)现在显示对话框。喜欢,
$("#dialog").dialog("open");
4)关闭对话框后,再次显示影片。喜欢,
$("#dialog").dialog("close");
$("#movie1").css("display","inline");
其他提示
wmode transparent已成为Flash的一部分多年,并不仅限于Flash Player 10.
无论如何,你不需要使用wmode透明;除非你真的需要SWF中的透明度,否则你应该使用wmode opaque。它的错误越来越少,处理能力越来越低。
诀窍是确保您的HTML元素在CSS中具有“位置”。
尝试按照以下示例和说明操作: http://learnswfobject.com/advanced-topics /放置-HTML元素-过一个快闪电影/
我无法提供可以解决问题的建议,因此我建议您可能想避免该问题。
而不是将 (x)html 内容放在 z-index 中的 flash 内容上
+------------+
| |
| +-------------+
| | html |
| | |
| +-------------+
| Flash |
+------------+
不如将 (x)html 内容放置在窗口中 Flash 上方:
+------------+
| html |
| |
+------------+
+------------+
| |
| Flash |
| |
| |
| |
| |
+------------+
它并不理想,但它至少提供了一个可行的解决方案,直到 Flash/html 能够更成功地共存。
我在书签中发现了这一点(它们来自10年前的时代)。虽然我现在没有任何Flash Player 9 / Safari来验证这一点。试一试。
正如pipwerks所说,WMode应该控制它,但并非所有平台/浏览器都能正确处理它们。在这种情况下,我会认为这是Safari的/ Flash9故障而且无法修复。
尝试将wmode参数设置为opaque。当涉及到Flash时,这似乎解决了许多HTML层/深度问题。