2012-03-07 4 views
2

모달 창에서 iframe 팝업으로 포함 된 YouTube 동영상을 만들려고합니다. 크롬과 파이어 폭스에서 성공적으로 작동하지만 IE에서는 작동하지 않습니다. Flash 비디오는 wmode가 투명하게 설정된 경우에도 z- 인덱스를 무시하는 것으로 보입니다 (동일한 결과로 불투명하게 시도했습니다). 동영상 위에 팝업되는 메뉴는 올바르게 작동하지만 동영상 위에 직접 위치 된 onclick 이벤트가있는 div는 작동하지 않습니다. 나는 Z- 인덱스를 변경하지 않고 수동으로 거의 모든 요소에 설정하려고했습니다.IE9 임베디드 비디오의 Z- 인덱스 문제

문제를 설명하는 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> 

나는이 문제를 해결하기 위해 노력을 통해 모든 검색했습니다,하지만 난 찾을 수있는 모든은 W 모드 및 Z- 인덱스를 설정하는 방법에 대한 정보입니다. 누락 된 것이 있거나 IE에서 작동하지 않을 수도 있습니다. 도와 주셔서 감사합니다.

+0

비슷한 문제 : "wmode = opaque"가있는 플래시 객체/swf가 ie8에서 잘 작동합니다. 즉, ie9에서 - 플래시가 텍스트를 표시하지 않습니다. wmode가 "window"로 변경되면 플래시가 텍스트를 표시하지만 플래시 객체도 최상위에 있고 다른 DOM 요소를 포함합니다. – woohoo

답변

1

WMODE 매개 변수는 페이지 또는 표시하려는 IFRAME에서 페이지가 렌더링되는 위치에 관계없이 모든 페이지의 임의의 EMBED/OBJECT 태그 내부에서 불투명하게 설정해야합니다. 그렇지 않으면 Flash 플레이어가 페이지 (iframe 또는 다른 방식) 중 어느 것이 렌더링되었는지에 관계없이 모든 것이 상속되거나 다른 방식으로 표시됩니다. 그것은 당신의 페이지에 있지 않다는 것을 do not't 문제. 브라우저에 표시됩니다.

사이트에 다른 사이트의 콘텐츠를 표시하는 경우 문제가 될 수 있습니다. 다행히도 YouTube에 솔루션이 있습니다.

IFRAME의 YouTube URL 끝 부분에? wmode = transparent를 추가하십시오 (이미 검색어 문자열이있는 경우 & wmode = transparent로 추가). 그것은 나를 위해 모달을 위해 완벽하게 일했습니다.

참고 : 나는 다른 질문에서이 대답을 가로 질러 와서 이것에 적용 : 나는이 일을 할 수 있었다 https://stackoverflow.com/questions/8278390/how-can-i-make-iframe-respect-z-index-in-ie

+0

실제로? wmode = transparent 쿼리 문자열을 사용하고 있는데 여전히이 문제가 있습니다. 샘플 페이지를 보면 플레이어 외부의 메뉴가 플레이어와 겹치도록 할 수 있지만 플레이어와 동일한 크기의 DIV는 클릭 이벤트를 캡처하지 않는다는 것을 알 수 있습니다. – Brady

+0

AWESOMEEE !!!! 정말 고마워! –

0

유일한 방법 포함 된 iFrame을보다 DIV 큰를 만드는 것이 었습니다, 그래서 DIV은 마우스가 iFrame을 통과하기 전에 마우스 오버를 캡처합니다. 사용자가 마우스를 충분히 빨리 움직여 마우스 오버를 캡처하지 않는 것처럼 완벽한 솔루션은 아닙니다.

이 문제는 IE10에서 해결되었습니다.