IE9 z-index проблема со встроенным видео - PullRequest
2 голосов
/ 08 марта 2012

Я пытаюсь сделать видео на YouTube, которое встроено в виде iframe, всплывающее в модальном окне. У меня он успешно работает в Chrome и Firefox, но он не будет работать в IE. Флэш-видео, кажется, переопределяет z-index, хотя у меня установлен прозрачный режим wmode (я также пробовал непрозрачный с теми же результатами). Меню, которые появляются над видео, работают правильно, но div с событием onclick, расположенным непосредственно над видео, не работает. Я попытался установить z-index практически для каждого элемента вручную, без изменений.

Я включил HTML-страницу, демонстрирующую проблему. В Chrome и Firefox, если вы нажмете на видео, вы получите предупреждение с сообщением «нажал», но в IE этого не происходит.

<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
    <script type='text/javascript'>
        $(function(){
            $("ul.dropdown li").hover(function(){
                $(this).addClass("hover");
                $('ul:first',this).css('visibility', 'visible');
            }, function(){
                $(this).removeClass("hover");
                $('ul:first',this).css('visibility', 'hidden');
            });

            $("ul.dropdown li ul li:has(ul)").find("a:first").append(" &raquo; ");
        });
    </script>
    <style type="text/css">
        *                                   { margin: 0; padding: 0; }
        body                                { font: 14px Helvetica, Sans-Serif; } 
        #page-wrap                          { width: 800px; margin: 80px auto; } 
        a                                   { text-decoration: none; }
        ul                                  { list-style: none; }
        p                                   { margin: 15px 0; }

        /* 
            LEVEL ONE
        */
        ul.dropdown                         { position: relative; }
        ul.dropdown li                      { font-weight: bold; float: left; zoom: 1; background: #ccc; }
        ul.dropdown a:hover                 { color: #000; }
        ul.dropdown a:active                { color: #ffa500; }
        ul.dropdown li a                    { display: block; padding: 4px 8px; border-right: 1px solid #333;
                                              color: #222; }
        ul.dropdown li:last-child a         { border-right: none; } /* Doesn't work in IE */
        ul.dropdown li.hover,
        ul.dropdown li:hover                { background: #F3D673; color: black; position: relative; }
        ul.dropdown li.hover a              { color: black; }


        /* 
            LEVEL TWO
        */
        ul.dropdown ul                      { width: 220px; visibility: hidden; position: absolute; top: 100%; left: 0; }
        ul.dropdown ul li                   { font-weight: normal; background: #f6f6f6; color: #000; 
                                              border-bottom: 1px solid #ccc; float: none; }

                                            /* IE 6 & 7 Needs Inline Block */
        ul.dropdown ul li a                 { border-right: none; width: 100%; display: inline-block; } 

        /* 
            LEVEL THREE
        */
        ul.dropdown ul ul                   { left: 100%; top: 0; }
        ul.dropdown li:hover > ul           { visibility: visible; }
    </style>
    <title>IE Bug</title>
</head>
<body>
<div class="page-wrapper">
    <div class="menu">
        <ul class="dropdown" style="z-index: 100;">
            <li>
                <a href="#">Menu</a>
                <ul class="sub_menu">
                    <li><a href="#">Sub Item 1</a></li>
                    <li><a href="#">Sub Item 2</a></li>
                </ul>
            </li>
        </ul>
    </div>
    <br />

    <div class="span4" style="background-color: transparent; display: block; margin-bottom: 0px; margin-left: 20px; margin-right: 0px; margin-top: 0px; width: 300px; z-index: 4;">
        <div class="column" style="margin-left: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; z-index: 3;">
            <div class="embedded-video" style="position: relative; z-index: 3;">
                <div class="video-launcher" onclick="alert('clicked');" style="position: absolute; cursor: pointer; width: 100%; height: 100%; z-index: 2;"></div>
                <div class="youtube-video" style="z-index: 1;">
                    <iframe style="z-index: 1;" width="300" height="225" src="http://www.youtube.com/embed/W8_Kfjo3VjU?rel=0&showinfo=0&wmode=transparent" frameborder="0" allowfullscreen></iframe>
                </div>
            </div>
        </div>
    </div>

</div>
</body>

Я искал все, пытаясь решить эту проблему, но все, что я могу найти, это информация о настройке wmode и z-index. Там должно быть что-то еще, что я пропускаю, или, возможно, это просто не будет работать в IE. Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 03 октября 2012

Вам нужно установить непрозрачный параметр WMODE внутри любых тегов EMBED / OBJECT в любом месте любой страницы независимо от того, где она отображается - на вашей странице или в IFRAME, который вы пытаетесь показать.В противном случае проигрыватель Flash будет располагаться поверх всего (унаследованного или иного) независимо от того, какие страницы (iframe или иным образом) предоставили его.Не имеет значения, что это не на вашей странице.Это отображается в браузере.

Это может быть проблематично, если вы показываете контент другого сайта на своем сайте.К счастью, у YouTube есть решение:

Добавить? Wmode = прозрачный в конец URL-адреса YouTube в IFRAME (или & wmode = прозрачный, если у вас уже есть строка запроса).Это прекрасно сработало для меня.

0 голосов
/ 13 октября 2012

Единственный способ, которым я смог выполнить эту работу, - сделать DIV больше, чем встроенный iFrame, чтобы DIV захватывал наведение мыши до того, как мышь прошла над iFrame.Это не идеальное решение, так как если пользователь перемещает мышь достаточно быстро, он не будет захватывать указатель мыши.

Эта проблема была решена в IE10.

...