Проблема з програмою wmode Youtube iframe


134

Використовуючи javascript з jQuery, я додаю iframe з URL-адресою youtube для відображення відео на веб-сайті, однак вбудований код, завантажений у iframe з youtube, не має wmode = "Opaque", тому модальні поля на сторінці відображаються під відео на YouTube.

Будь-які ідеї, як вирішити питання?


Це все ще проблема? Я раніше використовував це рішення, але не можу відтворити оригінальну проблему в останніх Chrome / Firefox / IE.
marcovtwout

Відповіді:


238

Спробуйте додати ?wmode=opaqueдо URL-адреси або &wmode=opaqueякщо вже є параметр.

Якщо це не працює, спробуйте це замість цього, &wmode=transparentякий буде працювати і в браузері IE.


1
приємно! працює на Firefox & Chrome, але чомусь не працює на IE ... будь-які ідеї?
danfromisrael

31
спробуйте використати & amp; wmode = прозорий замість цього
Шабіт

29
Налаштування "& amp; wmode = xxxx" передбачає, що ви вже передаєте параметри в URL-адресі. Я не був у своєму випадку, тому мені замість цього потрібно було додати "? Wmode = xxxx" до URL-адреси.
Метт Хаггінс

6
Відмінності між opaqueіtransparent . opaqueповинна бути більш ефективною.
пончик

3
Шабіт - "wmode = непрозорий" має бути "wmode = непрозорий" (нижній регістр 'o')
Джон

81

Спробуйте додати ?wmode=transparentдо кінця URL-адреси. Працювали для мене.


На мою думку, «прозорий» має бути кращим варіантом.
Фоксінні

18

Якщо ви використовуєте новий асинхронний API, вам потрібно буде додати такий параметр:

<!-- YOUTUBE -->
// 2. This code loads the IFrame Player API code asynchronously.
var tag = document.createElement('script');
tag.src = "http://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

// 3. This function creates an <iframe> (and YouTube player)
//    after the API code downloads.
var player;
var initialVideo = 'ApkM4t9L5jE'; // YOUR YOUTUBE VIDEO ID
function onYouTubePlayerAPIReady() {
    console.log("onYouTubePlayerAPIReady" + initialVideo);
    player = new YT.Player('player', {
      height: '381',
      width: '681',
      wmode: 'transparent', // SECRET SAUCE HERE
      videoId: initialVideo,      
       playerVars: { 'autoplay': 1, 'rel': 0, 'wmode':'transparent' },
      events: {
        'onReady': onPlayerReady,
        'onStateChange': onPlayerStateChange
      }
    });
}

Це засновано на документації google та прикладі тут: http://code.google.com/apis/youtube/iframe_api_reference.html


7
Зауважте, що ТАКОЖ потрібен wmode у програмі playerVars. Коли він знаходиться лише під програмою YT.Player, він працюватиме лише для програвача HTML5. Додавання wmode в playerVars також передає цей параметр об'єкту Flash, у якого є своя проблема z-порядку. Дивіться тут: groups.google.com/forum/?fromgroups#!topic/youtube-api-gdata/… Я відповідно відредагую вашу відповідь.
Ділан Маккалл

1
Я спробував це, і це не вийшло. Я також не знайшов посилання на wmode в документації YouTude.
sboisse

Посилання змінилося з моєї першої публікації, як і спосіб встановлення wmode. Ви можете встановити будь-який параметр спалаху зараз або параметр програвача youtube через програму playerVars. Я оновив наведений вище приклад.
Пластичний осетер

Завантаження цілого API просто для зміни значення, яке можна легко змінити в URL-адресі, - це загальний надмір. Не використовуйте це.
fregante

Є деякі з нас, які працюють з плеєром без хрому і вже використовують JS API для управління інтерфейсом. Для нас це рішення повністю скачує! Спасибі
maxijb

8

Додавання ?wmode=opaqueдо URL, здається, вирішує цю проблему для мене, хоча я ще не перевіряв її в IE.

Для тих, хто має проблеми з запропонованим раніше рішенням, зауважте, що вроджена амперсанда працюватиме лише тоді, коли ви вже надсилаєте інші аргументи до URL-адреси. Перший аргумент повинен мати початковий знак питання:http://www.example.com?first=foo&second=bar


Я спочатку отримував чорний прямокутник незалежно від відео, яке я намагався показати .. виявилося, що на тестовій машині не було встановлено спалах, і діалог для встановлення спалаху був занадто зміщений!
Зеб

3

Додайте &amp;wmode=transparentдо URL-адреси, і ви готові, перевірені.

Я використовую цю техніку у власному шрифті YouTube для плагінів Wordpress

Перевірте його вихідний код, якщо у вас виникли проблеми.


Додавання & amp; wmode = прозорого після того, як ви вставите URL-адресу, вирішено проблему в усіх браузерах. Дякую за містер Тубал, хороша робота :)

1

Лише підказка! - переконайтеся, що ви збільшили z-індекс елемента, який ви хочете, щоб бути над вбудованим відео. Я додав запит на рядок wmode, і він все ще не працював ..., поки я не збільшив z-індекс іншого елемента. :)



0

Я знаю, що це давнє запитання, але воно все ще з’являється в топових пошуках цього питання, тому я додаю нову відповідь, щоб допомогти тим, хто шукає його для IE:

Додавання &wmode=opaqueдо кінця URL-адреси НЕ працює в IE 10 ...

Однак додавання ?wmode=opaqueробить трюк!


Знайдено таке рішення тут: http://alamoxie.com/blog/web-design/stop-iframes-covering-site-elements


&і ?вони є правильними залежно від того, в якому порядку вони використовуються та які інші налаштування включені в URL-адресу. Очевидно ?використовується, якщо це перша (або єдина) установка, &інакше.
Олексій

Так, але IE має особливі потреби. Просто спробуйте і подивіться, що працює в IE 10, а що ні. Я ще не пробував цього в IE 11.
Бурштиновий червень

0

нещодавно я побачив, що іноді флеш-плеєр не розпізнає &wmode=opaque, інакше вам &WMode=opaqueтеж слід пройти (помітити великі регістри ).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.