Flash поверх диалогового окна jQuery
Я знаю, что многие задавали этот вопрос, но я думаю, что моя ситуация немного отличается.
У меня есть сайт, где у меня есть реклама, которая скрыта во Flash из-за проблем совместимости с xhtml/html. Но элементы flash находятся поверх моих диалогов jQuery, что не идеально.
Некоторые решения предлагают установить wmode на непрозрачный, но я не могу, потому что мои объявления представляют собой сценарии, которые выводят flash-элементы.
Другое решение предлагало скрыть рекламу, когда отображается диалоговое окно. Итак, мой вопрос: есть ли способ поместить флэш-контент в мои диалоговые окна jQuery, когда они видны и не изменяя флэш-код?
С наилучшими пожеланиями, Лассе Эспехолт
Обновление: теперь я вновь открыл вопрос с вознаграждением. На данный момент я скрываю каждое объявление Flash в "диалоге показа". Но это все еще не оптимальное решение. Итак, я ищу скрипт, который может сделать каждую Flash-анимацию непрозрачной (решение jQuery было бы лучше, но подойдет простое решение JavaScript). Или если будет другое решение, не обсуждаемое в этом вопросе, я буду рад услышать об этом:)
Обновление 2: Пока я сделал этот скрипт:
function opaqueAllFlashMovies() {
// Embed Flash movies
$('embed[wmode!="opaque"]').attr('wmode', 'opaque').wrap('<div>');
// Object flash movies with a wmode param
$('object[classid$="-444553540000"] parem[wmode]').attr('value', 'opaque');
// Object flash movies without a wmode param
$('object[classid$="-444553540000"]').not('param[wmode]').append('<param name=\'wmode\' value=\'opaque\'/>').wrap('<div>');
}
который работает в FF и Chrome, но не в IE. По-видимому, .append
выходит из строя. Есть идеи?
5 ответов
Вы не можете поместить HTML перед Flash, если не установите wmode в непрозрачный (или прозрачный).
При использовании wmode по умолчанию ("окно") Flash Player берет на себя всю визуализацию и взаимодействие с пользователем в своей области. Таким образом, браузер не может отображать HTML в этой области. Что делает wmode=" opaque" (или wmode="transparent"), так это то, что он отключает это поведение по умолчанию и интегрирует область Flash Player в обычные рендеринг и наслоения браузеров и тому подобное.
Но вам не нужно изменять какой-либо контент Flash для установки wmode, поскольку это делается в HTML (или с помощью SWFObject или другого скрипта, который вставляет элемент объекта Flash), так что если у вас есть контроль над "скриптами, которые выводят флэш-элементы" что вы упоминаете, вы можете позаботиться о настройке wmode там.
Я думаю, у меня есть решение. Используя диалоговое окно jquery-ui, потратил часы и часы, пытаясь понять это - работал для меня,
Логика заключалась в том, что если я не могу заставить JQuery выйти вперед, вернуть весь флэш-контент. исследование привело меня к этой ссылке - наконец-то, наконец, это сработало.
Как программно установить все <объект>, чтобы wmode был непрозрачным?
function makeObjectsOpaque3() {
var elementToAppend = document.createElement('param');
elementToAppend.setAttribute('name', 'wmode');
elementToAppend.setAttribute('value', 'opaque');
var objects = document.getElementsByTagName('object');
for(var i = 0; i < objects.length; i++) {
var newObject = objects[i].cloneNode(true);
elementToAppend = elementToAppend.cloneNode(true);
newObject.appendChild(elementToAppend);
objects[i].parentNode.replaceChild(newObject, objects[i]);
}
}
window.onload = makeObjectsOpaque3;
а также
if(window.onload) {
var onLoad = window.onload;
window.onload = function() {
onLoad();
makeObjectsOpaque3();
};
} else {
window.onload = makeObjectsOpaque3;
}
Я только что прочитал этот пост и попытался добавить параметр wmode="opaque" в тег объекта. Это работает для IE 8. Извините, если мой пост слишком поздно.
Как насчет того, чтобы вручную установить непрозрачность wmode с помощью javascript после того, как флэш-память уже загружена?
Поиск в Google для "iframe shim". По сути, размещение iframe позади html приведет к его переполнению во флэш-памяти (игнорируя настройки wmode).
Пока-пока