YouTube wideo osadzone przez iframe ignorując z-index?

Próbuję zaimplementować poziome wielopoziomowe rozwijane menu nawigacyjne. Bezpośrednio pod (pionowo) menu, mam wideo YouTube osadzone przez iframe. Jeśli najdę kursorem na jedną z głównych pozycji nav poziomu w Firefoksie, menu rozwijane poprawnie pojawi się na górze wideo.

W Chrome i IE9, jednak tylko fragment rozwijanego menu jest widoczny w małym obszarze przestrzeni między menu a ramką iframe. Reszta wydaje się być za {[3] } iframe.

Problem wydaje się być związany z filmem na YouTube, a nie ramką iframe. Aby przetestować, skierowałem iframe na inną stronę internetową, a nie wideo, a menu rozwijane działało dobrze, nawet w IE.

  • Pytanie 1: WTF?
  • Pytanie 2: Dlaczego, nawet jeśli wyjaśnię umieścić z-index:-999 !important; na iframe czy ten problem nadal występuje?

Czy Jest jakiś wewnętrzny CSS, który zawiera kod osadzania YouTube, który w jakiś sposób nadpisuje rzeczy?

Author: aksu, 2012-01-31

10 answers

Spróbuj dodać wmode, wydaje się, że ma dwa parametry.

&wmode=Opaque

&wmode=transparent

Nie mogę znaleźć technicznego powodu, dla którego to działa, lub znacznie więcej wyjaśnień, ale spójrz na to zapytanie .

<iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/lzQgAR_J1PI?wmode=transparent" frameborder="0" wmode="Opaque">

Lub to

//Fix z-index youtube video embedding
$(document).ready(function (){
    $('iframe').each(function(){
        var url = $(this).attr("src");
        $(this).attr("src",url+"?wmode=transparent");
    });
});
 242
Author: toomanyairmiles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-09 13:21:29

odpowiedź Joshc była na dobrej drodze, ale odkryłem, że całkowicie usuwa ?rel=0 querystring i zastępuje go pozycją ?wmode=transparent - która ma efekt wyświetlania listy sugerowanych Filmów na YouTube na końcu odtwarzania, mimo że pierwotnie nie chciałeś, aby tak się stało.

Zmieniłem kod tak, że atrybut src osadzonego wideo jest skanowany jako pierwszy, aby sprawdzić, czy nie ma już w nim znaku zapytania ? (ponieważ oznacza to obecność z wcześniej istniejącego ciągu zapytań, który Może być czymś w rodzaju ?rel=0, ale teoretycznie może być wszystkim, co YouTube zdecyduje się dołączyć w przyszłości). Jeśli istnieje już ciąg zapytania, chcemy go zachować, a nie zniszczyć, ponieważ reprezentuje ustawienie wybrane przez tego, kto wkleił ten film na YouTube, i prawdopodobnie wybrał go z jakiegoś powodu!

Więc, jeśli ? zostanie znaleziony, wmode=transparent zostanie dołączony przy użyciu formatu: &mode=transparent, aby po prostu oznaczyć go na końcu wcześniej istniejącego ciąg zapytania.

Jeśli nie znaleziono ?, kod będzie działał dokładnie tak samo jak pierwotnie (w postu toomanyairmiles), dodając tylko ?wmode=transparent jako nowy ciąg zapytania do adresu URL.

Teraz, niezależnie od tego, co może lub nie musi znajdować się na końcu adresu URL YouTube jako ciąg zapytania, zostaje on zachowany, a wymagane parametry wmode są wstrzykiwane lub dodawane bez uszkodzenia tego, co było wcześniej.

Oto kod do wrzucenia do twojego document.ready funkcja:

$('iframe').each(function() {
  var url = $(this).attr("src");
  if (url.indexOf("?") > 0) {
    $(this).attr({
      "src" : url + "&wmode=transparent",
      "wmode" : "opaque"
    });
  }
  else {
    $(this).attr({
      "src" : url + "?wmode=transparent",
      "wmode" : "opaque"
    });
  }
});
 28
Author: BigJacko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-30 10:45:16

Wystarczy dodać jeden z tych dwóch do src url:

&wmode=Opaque

&wmode=transparent

<iframe id="videoIframe" width="500" height="281" src="http://www.youtube.com/embed/xxxxxx?rel=0&wmode=transparent" frameborder="0" allowfullscreen></iframe>
 6
Author: Code.Town,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-07 00:11:13

Mam ten sam problem na YouTube iframe osadza tylko w Internet explorer choć.

Z-index został całkowicie zignorowany, lub flash video po prostu pojawiał się na najwyższym możliwym indeksie.

Tego właśnie użyłem, lekko dostosowując powyższy skrypt jquery.

Mój kod embed, prosto z YouTube...

<iframe width="560" height="315" src="http://www.youtube.com/embed/QldZiR9eQ_0?rel=0" frameborder="0" allowfullscreen></iframe>


JQuery slighty zaadaptowane z powyższej odpowiedzi...

$('iframe').each( function() {
    var url = $(this).attr("src")
    $(this).attr({
        "src" : url.replace('?rel=0', '')+"?wmode=transparent",
        "wmode" : "Opaque"
    })
});


Zasadniczo jeśli nie wybierz Pokaż sugerowane Filmy gdy film zakończy się w Ustawieniach osadzania, masz ?rel=0 na końcu adresu URL "src". Dodałem bit replace w przypadku, gdy ?rel=0 istnieje. W przeciwnym razie ?wmode=transparent nie zadziała.


 5
Author: Joshc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-30 01:13:46

Możemy po prostu dodać ?wmode=transparent na końcu adresu URL YouTube. To powie YouTube, aby dołączyć film z zestawem wmode. Więc nowy kod osadzania będzie wyglądał tak:-

<iframe width="420" height="315" src="http://www.youtube.com/embed/C4I84Gy-cPI?wmode=transparent" frameborder="0" allowfullscreen>
 2
Author: user3410247,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-12 11:07:52

Tylko ten mi pomógł:

<script type="text/javascript">
var frames = document.getElementsByTagName("iframe");
    for (var i = 0; i < frames.length; i++) {
        src = frames[i].src;
        if (src.indexOf('embed') != -1) {
        if (src.indexOf('?') != -1) {
            frames[i].src += "&wmode=transparent";
        } else {
            frames[i].src += "?wmode=transparent";
        }
    }
}
</script>

Ładuję go w stopce.plik php Wordpress. Kod znaleziony w komentarzu tutaj (dzięki Gerson)

 2
Author: dragoeco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-25 11:18:45

Wmode=nieprzezroczysty lub przezroczysty na początku łańcucha moich zapytań niczego nie rozwiązał. Ten problem dla mnie występuje tylko na Chrome, a nie na wszystkich komputerach. Tylko jeden procesor. Występuje również w osadzeniach vimeo i ewentualnie innych.

Moje rozwiązanie, aby dołączyć do zdarzenia "pokazane" i "ukryte" modali bootstrap, których używam, dodać klasę, która ustawia ramkę iframe na 1x1 pikseli i usunąć klasę, gdy modal zostanie zamknięty. Wydaje się, że działa i jest prosty w realizacji.

 1
Author: Danny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-24 19:33:43

Odpowiedzi abow naprawdę nie działa dla mnie, miałem Zdarzenie kliknięcia na wrapper i ie 7,8,9,10 zignorował Indeks z, więc moja poprawka dawała wrapper kolor tła i to wszystko nagle zadziałało. Al chociaż miał być przezroczysty, więc zdefiniowałem wrapper z tłem-kolor biały, a potem nieprzezroczystość 0.01, i teraz działa. Mam również powyższe funkcje, więc może to być kombinacja.

Nie wiem dlaczego to działa, jestem po prostu szczęśliwy, że tak.

 1
Author: eduardo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-01 12:19:25

Kod Javascript BigJacko zadziałał dla mnie, ale w moim przypadku najpierw musiałem dodać trochę kodu jQuery "noconflict". Oto poprawiona wersja, która działała na mojej stronie:

<script type="text/javascript">
var $j = jQuery.noConflict(); 
jQuery(document).ready(function($j){
  $j('iframe').each(function() {
    var url = $j(this).attr("src");
      if ($j(this).attr("src").indexOf("?") > 0) {
        $j(this).attr({
          "src" : url + "&wmode=transparent",
          "wmode" : "Opaque"
        });
      }
      else {
        $j(this).attr({
          "src" : url + "?wmode=transparent",
           "wmode" : "Opaque"
        });
      }
   });
});
</script>
 1
Author: cclay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-09 19:21:44

Wszystko czego potrzebujesz na iframe to:

...wmode="opaque"></iframe>

Oraz w URL:

http://www.youtube.com/embed/123?wmode=transparent
 1
Author: Sam Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-12 10:29:19