一个flash电影的javascript对话框

时间:2009-10-11 17:09:41

标签: javascript jquery ajax flash dialog

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

在谷歌浏览器中,它可以正常运行,但其他浏览器会出现问题:

  • 使用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>

6 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

您可以使用iframe垫片解决此问题,另请参阅this answer

答案 2 :(得分:1)

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 :(得分:0)

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

但要准备好玩。它周围有一些奇怪的错误。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

你有一个奇怪的旧学校HTML和XHTML混合物。我会取出中心标签,身体上的bgcolor属性,并将包装div的样式放入样式中,即使它只是嵌入在页面中。

那就是说,我能想到的唯一可能是给你一些问题的是你在div上设置了z-index,但没有位置。尝试添加位置:相对于div,看看是否能解决你的问题。