диалог JavaScript над флэш-фильмом - PullRequest
3 голосов
/ 11 октября 2009

У меня есть такая система: когда открывается главный сайт, появляется галерея изображений Flash, когда пользователь нажимает на изображение, используя функцию Flash "ExternalInterface.call", я вызываю функцию javascript, которая открывает модальное диалоговое окно java с именем nyromodal (который извлекает необработанные данные HTML через ajax с другой страницы в диалоговом окне) во флэш-фильме. И вот, когда возникает проблема:

В Google Chrome он работает должным образом, однако проблемы возникают с другими браузерами:

  • В 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 ]

8 голосов
/ 17 октября 2009

Прозрачный не будет работать для этого. Чтобы показывать HTML поверх Flash, вам нужно показать фильм с wmode="opaque".

Кроме того, установка свойства CSS zIndex в 0 для фильма и 1000 (или что-либо выше 0) для всплывающего окна поможет в некоторых браузерах.

1 голос
/ 20 мая 2011
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.
1 голос
/ 11 октября 2009

Вы, вероятно, можете решить эту проблему с помощью вставки iframe, см. Также этот ответ .

0 голосов
/ 15 октября 2009

У вас странная смесь старой школы HTML и XHTML. Я бы выбрал центральный тег, атрибут bgcolor на теле и поместил стиль для div-оболочки в стиль, даже если он просто встроен в страницу.

Тем не менее, единственное, что я могу подумать, что это может вызвать некоторые проблемы, это то, что у вас установлен z-индекс на div, но нет позиции. Попробуйте добавить позицию: относительно div и посмотрите, излечивает ли это то, что вас беспокоит.

0 голосов
/ 14 октября 2009

Похоже, что у вас что-то испорчено в ваших установках браузера, это не должно быть проблемой даже удаленно, независимо от конфигурации встраивания. Окна оповещений генерируются более или менее на уровне Win32 / OS, если они отображаются неправильно или с повреждением, значит ваш компьютер обнаружен.

0 голосов
/ 11 октября 2009

Вам необходимо встроить вспышку, используя прозрачный или непрозрачный режим.

Но будьте готовы повеселиться. Вокруг него есть несколько странных ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...