Я застрял на том, что кажется конфликтом CSS / z-index с проигрывателем YouTube. В Firefox 3 под Windows XP взгляните на эту страницу: http://spokenword.org/program/21396 Нажмите кнопку «Собрать» и обратите внимание, что во всплывающем окне <div> отображается под проигрыватель YouTube. В других браузерах вверху отображается <div>. Он имеет значение z-index, равное 999999. Я попытался установить для z-index элемента <object>, содержащего игрока, более низкое значение, но это не сработало. Есть идеи, как заставить всплывающее окно появляться над плеером?






Попробуйте добавить параметр wmode к opaque следующим образом:
(Обратите внимание, что он включен в и то и другое тега <param>, и атрибут wmode в теге <embed>.)
<object width='425' height='344'>
<param name='movie' value='http://www.youtube.com/v/Wj_JNwNbETA&hl=en&fs=1'>
<param name='type' value='application/x-shockwave-flash'>
<param name='allowfullscreen' value='true'>
<param name='allowscriptaccess' value='always'>
<param name = "wmode" value = "opaque" />
<embed width='425' height='344'
src='http://www.youtube.com/v/Wj_JNwNbETA&hl=en&fs=1'
type='application/x-shockwave-flash'
allowfullscreen='true'
allowscriptaccess='always'
wmode = "opaque"
></embed>
</object>
Ха! Это сделало это. Мне нужно будет прочитать, чтобы понять, почему. Мог бы подумать, что создание непрозрачного плеера может иметь противоположный эффект. Превосходно!
Отстойно, что рекламные сети этого не делают, а иногда и ОТКАЗЫВАЮТСЯ. Они хотят, чтобы их реклама просачивалась ...
Код Taht работал у меня в IE, но не в firefox. У меня такой же код.
Мы используем плагин jQuery Flash для преобразования ссылок YouTube во Flash-ролики. В этом случае wmode передается как опция, чтобы видео YouTube отображалось под открытым диалоговым окном jQuery:
$('a[href^ = "http://www.youtube.com"]').flash(
{ width: nnn, height: nnn, wmode: 'opaque' }
);
Я нашел чистую JS-функцию, которая исправляет ее во всех браузерах!
вот так:
function fix_flash() {
// loop through every embed tag on the site
var embeds = document.getElementsByTagName('embed');
for (i = 0; i < embeds.length; i++) {
embed = embeds[i];
var new_embed;
// everything but Firefox & Konqueror
if (embed.outerHTML) {
var html = embed.outerHTML;
// replace an existing wmode parameter
if (html.match(/wmode\s*=\s*('|")[a-zA-Z]+('|")/i))
new_embed = html.replace(/wmode\s*=\s*('|")window('|")/i, "wmode='transparent'");
// add a new wmode parameter
else
new_embed = html.replace(/<embed\s/i, "<embed wmode='transparent' ");
// replace the old embed object with the fixed version
embed.insertAdjacentHTML('beforeBegin', new_embed);
embed.parentNode.removeChild(embed);
} else {
// cloneNode is buggy in some versions of Safari & Opera, but works fine in FF
new_embed = embed.cloneNode(true);
if (!new_embed.getAttribute('wmode') || new_embed.getAttribute('wmode').toLowerCase() == 'window')
new_embed.setAttribute('wmode', 'transparent');
embed.parentNode.replaceChild(new_embed, embed);
}
}
// loop through every object tag on the site
var objects = document.getElementsByTagName('object');
for (i = 0; i < objects.length; i++) {
object = objects[i];
var new_object;
// object is an IE specific tag so we can use outerHTML here
if (object.outerHTML) {
var html = object.outerHTML;
// replace an existing wmode parameter
if (html.match(/<param\s+name\s*=\s*('|")wmode('|")\s+value\s*=\s*('|")[a-zA-Z]+('|")\s*/?\>/i))
new_object = html.replace(/<param\s+name\s*=\s*('|")wmode('|")\s+value\s*=\s*('|")window('|")\s*/?\>/i, "<param name='wmode' value='transparent' />");
// add a new wmode parameter
else
new_object = html.replace(/</object\>/i, "<param name='wmode' value='transparent' />\n</object>");
// loop through each of the param tags
var children = object.childNodes;
for (j = 0; j < children.length; j++) {
try {
if (children[j] != null) {
var theName = children[j].getAttribute('name');
if (theName != null && theName.match(/flashvars/i)) {
new_object = new_object.replace(/<param\s+name\s*=\s*('|")flashvars('|")\s+value\s*=\s*('|")[^'"]*('|")\s*/?\>/i, "<param name='flashvars' value='" + children[j].getAttribute('value') + "' />");
}
}
}
catch (err) {
}
}
// replace the old embed object with the fixed versiony
object.insertAdjacentHTML('beforeBegin', new_object);
object.parentNode.removeChild(object);
}
}
}
теперь вы можете просто запустить, когда страница загружается с помощью jQuery:
$(document).ready(function () {
fix_flash();
});
Мне жаль, что я не видел это в прошлом месяце, когда я искал что-то подобное! Мой поиск не нашел эту страницу. Закончилось написанием чего-то почти такого же!
Сработало как разрекламировано. Спасибо!
Однако будьте осторожны, это решение будет скрывать объекты Flash в IE <9.
привет фанделост. у меня все еще работает. Я использовал его здесь: skydiveinisrael.com, и все вроде хорошо. посмотрите видео на YouTube посередине и нажмите на одну из картинок сбоку. Вы увидите, как над вспышкой выскочит изображение, что и является желаемым результатом ...
Хотя рекомендация CMS действительна, есть важное обновление. Если вы хотите использовать iframe вместо embed, просто добавьте ?wmode=transparent в ссылку на видео, и это творит чудеса. Я считаю это более простым и понятным.
Обновлять, фев 2014
Прошло много времени, и это может быть устаревшим.
Кто-то сообщил, что теперь вместо него работает &wmode=transparent.
Это действительно хорошо работает, ile! Откуда ты про обновление узнал?
Это наиболее актуальный ответ, поскольку больше никто не использует теги для встраивания YouTube. Спасибо!
Большой! Спасибо! Действительно, это сегодня актуальный ответ :)
Согласовано. Этот должен быть сверху.
Я заметил, что wmode = "opaque" ужасно влияет на использование процессора.
Chrome делает на моем ноутбуке 50% загрузки ЦП (без непрозрачности ~ 8%).
Так что будьте осторожны с этим вариантом.
Какую версию Flash вы используете?