【问题标题】:javascript dialog over a flash movieFlash 电影上的 javascript 对话框
【发布时间】:2009-10-11 17:09:40
【问题描述】:

我有一个这样的系统:当主站点打开时,会出现一个 Flash 图片库,当用户单击图片时,使用 Flash 的“ExternalInterface.call”函数,我调用一个 JavaScript 函数,该函数打开一个名为Flash 电影上的 nyromodal(通过 ajax 从对话框内的另一个页面获取原始 HTML 数据)。这就是问题发生的时候:

在谷歌浏览器中它运行良好,但在其他浏览器上会出现问题:

  • 使用 Internet Explorer,对话框会打开,但当我单击“关闭”按钮时,对话框会停留在那里,奇怪的是,如果我最小化 IE 按钮并最大化它,对话框就会消失。

  • 使用 Firefox,在打开触发的对话框时,对话框窗口只显示一些损坏的图形,但如果我移动鼠标,它会显示内容。

什么会导致这个问题?我该如何解决?

这里是源代码,网站没有在任何网站上,因此我无法直接显示它:

<!DOCTYPE html PUBLIC

  "-//W3C//DTD XHTML 1.0 Transitional//EN"

  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  <link type="text/css" href="/media/style.css" rel="stylesheet" /> 
  <link rel="stylesheet" href="/media/nyroModal.full.css" type="text/css" media="screen" />    <script type="text/javascript" src="/media/jquery.js"></script> 
  <script language="javascript">AC_FL_RunContent = 0;</script> 
  <script type="text/javascript" src="/media/AC_RunActiveContent.js"></script> 
  <script type="text/javascript" src="/media/jquery.nyroModal-1.5.2.pack.js"></script> 
  <script type="text/javascript"> 
    function showItem(i,x){
        var myurl = "/item/?i="+i;
        $.nyroModalManual({url:myurl,title:x});
    }
  </script> 
</head> 
<body bgcolor="#000000"> 
<!--url's used in the movie--> 
<!--text used in the movie--> 
<!-- saved from url=(0013)about:internet --> 
<div STYLE="z-index: 1;"><center> 
<script language="javascript"> 

    if (AC_FL_RunContent == 0) {
        alert("This page requires AC_RunActiveContent.js.");
    } else {
        AC_FL_RunContent(
            'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0',
            'width', '100%',
            'height', '600',
            'src', '/media/preview',
            'quality', 'high',
            'pluginspage', 'http://www.macromedia.com/go/getflashplayer',
            'align', 'middle',
            'play', 'true',
            'loop', 'true',
            'scale', 'noScale',
            'wmode', 'transparent',
            'devicefont', 'false',
            'id', 'preview',
            'bgcolor', '#2e2e2e',
            'name', 'preview',
            'menu', 'true',
            'allowFullScreen', 'false',
            'allowScriptAccess','sameDomain',
            'movie', '/media/preview',
            'salign', ''
            ); //end AC code
    }
</script> 
<noscript> 
    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="1024" height="850" id="preview" align="middle"> 
    <param name="allowScriptAccess" value="sameDomain" /> 
    <param name="allowFullScreen" value="false" /> 
    <param name="movie" value="/media/preview.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#000000" />  <embed src="/media//media/preview.swf" quality="high" bgcolor="#000000" width="100%" height="850" name="preview" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> 
    </object> 
</noscript> 
</center> 
</div> 
</body> 
</html>

【问题讨论】:

    标签: javascript jquery ajax flash dialog


    【解决方案1】:

    透明不适用于此。为了通过 Flash 显示 HTML,您需要使用 wmode="opaque" 显示您的电影。

    此外,将电影的 CSS zIndex 属性设置为 0,将弹出窗口设置为 1000(或任何大于 0 的值)在某些浏览器中会有所帮助。

    【讨论】:

      【解决方案2】:
      var flashFlag = false;
      var flashObjs;
      
      // on javascript Dialog open event
      flashFlag = checkflashContent();
      
      function checkflashContent() {    
          //alert('checking for flash');    
          var flashObjects = new Array();    
          var flag = false;
      
          for (i = 0; i < document.getElementsByTagName("object").length; i++) {    
              flashObjects[i] = document.getElementsByTagName("object")[i];
      
              // alert('found flash');    
              jQuery(flashObjects[i]).hide();    
              flag = true;    
          }    
          flashObjs = flashObjects;    
          return flag;    
      }
      
      // on Javascript dialog close event
      function closeDialog(){
      ...
      ...
      if (flashFlag) {    
          //alert('dialog closed, showing flash');
      
          for (i = 0; i < flashObjs.length; i++) {    
              jQuery(flashObjs[i]).show();    
          }    
      }
      
      // On Open Event get the elements by tag Name (OBJECT) 
      // and use jQuery .hide to hide the content and on 
      // dialog close event use jQuery .show to show the flag back.
      

      【讨论】:

        【解决方案3】:

        您需要使用透明或不透明的 wmode 嵌入 flash。

        但要准备好找点乐子。它周围有一些奇怪的错误。

        【讨论】:

        • 我已经添加了透明,你可以在我的源代码中看到。这没有帮助。
        • +1 西蒙。没有注意到你也提出了这个建议。但请注意,transparent 不起作用,只是不透明。这就是为什么它对他不起作用:)
        【解决方案4】:

        听起来您的浏览器安装有问题,无论嵌入配置如何,这都不应该是一个严重的问题。警报窗口或多或少是在 Win32/OS 级别生成的,如果它们显示不正确或损坏,那么您的计算机已被淘汰。

        【讨论】:

          【解决方案5】:

          你有一个老式 HTML 和 XHTML 的奇怪混合。我会取出 center 标签,body 上的 bgcolor 属性,并将包装器 div 的样式放入一个样式中,即使它只是嵌入到页面中。

          也就是说,我认为可能会给它带来一些问题的唯一事情是您在 div 上设置了 z-index,但没有位置。尝试添加 position: relative 到 div 看看这是否能治愈你的问题。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-07
            • 1970-01-01
            • 2017-10-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多