2012-03-07 2 views
2

私は、モーダルウィンドウでiframeポップアップとして埋め込まれたYouTube動画を制作しようとしています。私はそれが正常にクロムとFirefoxで働いているが、それはIEでは動作しません。 Flashビデオは、透明に設定されたwmodeを持っているにもかかわらず、z-indexをオーバーライドするようです(同じ結果で不透明にしました)。動画の上にポップアップするメニューは正しく動作しますが、動画の上に直接配置された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> 

私はこのすべてを解決しようとする上で検索しましたが、私は見つけることができるすべてはWMODEとzインデックスの設定についての情報です。私は行方不明の何か他のものがなければならない、またはこれはちょうどIEで動作しません。助けてくれてありがとう。

+0

同様の問題: "wmode = opaque"のFlashオブジェクト/ swfがie8で正常に動作しました。つまり、ie9にあります。フラッシュにはテキストが表示されません。 wmodeが "window"に変更された場合、フラッシュにはテキストが表示されますが、フラッシュオブジェクトも一番上にあり、他のDOM要素もカバーします。 – woohoo

答えて

1

ページ上または表示しようとしているIFRAME上で、どこに表示されるかに関係なく、任意のページの任意のEMBED/OBJECTタグ内で、WMODEパラメータを不透明に設定する必要があります。それ以外の場合、Flash Playerは、どのフレーム(iframeなど)に関係なく、すべてのもの(継承されたものなど)の上に表示されます。それはあなたのページにないということはありません。ブラウザに表示されます。

あなたのサイトに別のサイトのコンテンツを表示していると問題になることがあります。幸いなことに、YouTubeにはソリューションがあります:

IFRAMEのYouTube URLの末尾に?wmode = transparentを追加します(クエリ文字列がすでにある場合は& wmode = transparent)。それは私にとってモーダルのために完璧に働いた。

注:私は別の質問からこの回答に出くわしたし、この1にそれを適用: https://stackoverflow.com/questions/8278390/how-can-i-make-iframe-respect-z-index-in-ie

+0

実際には?wmode = transparentクエリ文字列を使用していますが、それでもこの問題はあります。私のサンプルページを見ると、プレイヤーの外にあるメニューがプレーヤーと重なり合うことができますが、プレイヤーとまったく同じサイズのDIVはクリックイベントをキャプチャしません。 – Brady

+0

AWESOMEE​​E !!!!本当にありがとう! –

0

私はこの作品を作ることができた唯一の方法は、組み込みのiFrameよりDIVを大きくしたので、 DIVは、マウスがiFrameを通過する前にマウスオーバーをキャプチャします。ユーザーがマウスを素早く動かしてマウスオーバーを捕捉しないかのように、これは完璧な解決策ではありません。

この問題はIE10で解決されました。

関連する問題