IE 嵌入 iframe 無視 z-index

IE8 在嵌入 youtube 影片的時候,嵌入的 ifame 會無視 z-index 的排序,所以當頁面有個下拉選單就在影片上方,下拉時,可能就會被這個 iframe 擋住選項,就算你對下拉選單使出黑魔法 z-index: 9999 !important,這個 iframe 還是會臉不紅氣不喘的擋住選項…

google 了一下在 iframe 上加入 wmode 參數可解,詳情請參考這裡

$(document).ready(function (){
   $(‘iframe’).each(function(){
       var url = $(this).attr(“src”);
       $(this).attr(“src”,url+“?wmode=transparent”);
   });
});

但是!!!

如果你遇到嵌入的 youtube 影片不僅僅是個影片,是個播放清單的時候,用上述的方式加入 wmode 參數,會導致播放清單點擊播放時產生 “影片不存在” 的窘況。
所以建議將 wmode 參數放在前面,就不會影響播放清單的播放了(詳情可參考這裡

$(function(){
    $(“iframe”).each(function(){
       var ifr_source = $(this).attr('src’);
       var wmode = “wmode=opaque”;
       if(ifr_source.indexOf(’?’) != -1) {
           var getQString = ifr_source.split(’?’);
           var oldString = getQString[1];
           var newString = getQString[0];
           $(this).attr('src’,newString+’?’+wmode+’&’+oldString);
       }
       else $(this).attr('src’,ifr_source+’?’+wmode);
   });
});

然後我原本以為這東西只會在 IE8 遇到,因為當時測試了win7 IE11 並沒有遇到這個問題,但沒想到過幾天,有人測試發現會遇到跟 IE8 一樣的問題。抽絲剝繭之後發現,我原先測試的版本是 win7 IE11 18XXX 版本,確實不會有這個 z-index 問題,但是在 win7 IE11 17XXX 和 16XXX (推測 18XXX 以下版本可能都有這個問題吧…)卻有這個 z-index 的問題。

那就…改判斷式,保險起見讓 IE 家族都加上 wmode 參數好了…(._.a)

第一次知道會有這種隔代遺傳的 bug…IE 總是能讓我跪下