【问题标题】:Insert div over flash in IE在 IE 中通过 flash 插入 div
【发布时间】:2011-03-10 00:00:09
【问题描述】:

我有一个包含多个子菜单项的菜单栏。主页包含位于菜单栏下方的 Flash 动画。当子菜单项在 flash 文件上方时,flash 文件将显示在菜单栏上方。我尝试使用 z-index,但它不起作用。

这个问题只发生在 IE 中。

有什么建议吗?

谢谢

【问题讨论】:

    标签: html css flash


    【解决方案1】:

    是的,克里斯,

    您必须为 Flash 嵌入代码设置一个属性

    <param name="wmode" value="transparent" />
    

    这会起作用

    【讨论】:

    • 我对 IE-11 也有同样的问题,但它没有用......有什么想法吗?
    【解决方案2】:

    插入flash文件的地方,需要设置窗口模式为透明:

    <embed src="flashfile" wmode="transparent">
    

    【讨论】:

    • 我不知道它这么简单。我在网上搜索,有人说这是不可能的,所以我在stackoverflow上试试运气,有答案!非常感谢
    【解决方案3】:

    Muneer 和 Tim 已经给出了很好的答案,但我想补充一些额外的信息:

    • Adobe 的网站上有一个关于 Flash OBJECT and EMBED tag attributes 的文档
    • transparentopaque 值会导致可访问性问题,因为它们会将 Flash 对象的内容隐藏到屏幕阅读器。只有 window 的默认值才适用于屏幕阅读器
    • z-index 在您的情况下不会也不能做任何事情:该对象由插件、flash 播放器或替代品管理,并且它完全在浏览器呈现的页面之外进行。它仍然与它交互(宽度、高度、JS),但至于渲染......
    • 在 IE6(和 7?)中的选择元素存在类似问题,其中定位元素上的 z-index 值不会将后者呈现在选择之上(由于 IE 考虑选择元素的方式,这是一个错误)
    • 您应该在 OS X 和 Linux 上进行测试,这些操作系统上的闪存存在很多问题。

    【讨论】:

      【解决方案4】:

      有一个更好的解决方案,因为添加该参数并不总是有效,尤其是在 div 中使用 flash 对象时。

      在页面末尾注册 flash 对象,如下所示:

      <script type="text/javascript">
          swfobject.registerObject('FlashIdName');
      </script>
      

      然后像这样调用一个javascript函数:

      <script type="text/javascript">
          swfobject.registerObject('FlashIdName');
          Chk_Flash('FlashIdName');
      </script>
      

      此函数执行以下操作:

      <script type="text/javascript">
      function Chk_Flash(ToRegister)
      {
         document.getElementById('FlashIdName').style.visibility = 'visible';
         return true;
      }
      </script>
      

      这适用于所有浏览器 100%


      你也可以使用:

      document.getElementById('FlashIdName').style.visibility = 'hidden';
      

      现在,如果您在 div 标签上调用操作,例如:

      document.getElementById('MyDiv').style.visibility = 'block';
      

      或 document.getElementById('MyDiv').style.visibility = 'none';

      您需要做的是首先执行 div 操作,然后按该顺序调用 flash 可见性:

      document.getElementById('MyDiv').style.display = 'block';
      document.getElementById('FlashIdName').style.visibility = 'visible';
      

      享受吧!

      【讨论】:

        【解决方案5】:

        使用这些值代替“透明”:

        wmode="opaque"
        

        【讨论】:

          【解决方案6】:

          我终于找到了一个适用于所有浏览器的解决方案。

          如果我用过

          <param name="wmode" value="transparent" />
          

          ,我会在 IE 上获得所需的输出,但不会在 firefox 上获得所需的输出,如果我使用过

          <embed wmode="transparent" ></embed>
          

          ,我在 Firefox 中得到了所需的输出,但没有 ie。

          所以我决定在所有浏览器上都使用这两种方法

           <!--[if IE]>
              <param name="wmode" value="transparent" />
           <![endif]-->
          
           <embed wmode="transparent" ></embed>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-01-19
            • 2015-07-04
            • 2015-08-22
            • 2012-04-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-05-01
            相关资源
            最近更新 更多