Вспышка поверх диалогового окна 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 не удается. Любые идеи?


person Lasse Espeholt    schedule 04.10.2009    source источник


Ответы (5)


Вы не можете поместить HTML перед Flash, если не установите wmode на непрозрачный (или прозрачный).

В режиме wmode по умолчанию («окно») Flash Player берет на себя всю визуализацию и взаимодействие с пользователем в своей области. Таким образом, браузер не может отображать HTML в этой области. Что делает wmode = "opaque" (или wmode = "transparent"), так это то, что он отключает это поведение по умолчанию и как бы интегрирует область Flash Player в обычный рендеринг и слои браузеров и тому подобное.

Но вам не нужно изменять какое-либо содержимое Flash для установки wmode, поскольку это делается в HTML (или через SWFObject или другой сценарий, который вставляет элемент объекта Flash), поэтому, если у вас есть контроль над «сценариями, которые выводят элементы flash» что вы упомянули, вы можете позаботиться о настройке wmode там.

person Lars Blåsjö    schedule 04.10.2009
comment
Я не контролирую скрипты. Они предоставляются и при необходимости могут меняться каждую секунду. У меня есть сценарии в тегах iframes ‹object type = text / html /›. Могу ли я настроить jQuery для редактирования wmode в каждом flash-объекте, включая flash-объекты внутри iframe? - person Lasse Espeholt; 04.10.2009
comment
Ладно, это плохо. Я не знаю, можно ли заставить jQuery изменять html-код объекта flash на лету, но для его изменения после загрузки flash может потребоваться перезагрузка flash, я думаю, в результате каждое объявление загружается дважды. Я думаю, что скрытие рекламы при отображении диалогового окна пока что кажется лучшим решением. - person Lars Blåsjö; 04.10.2009
comment
И люди действительно ЖАЛОБАЛИ, когда Джобс сказал, что не будет поддерживать Flash. Facepalm. - person Winfield Trail; 26.06.2011
comment
@Kerin, это связано с плагинами браузера, а не с Flash, такие же проблемы можно увидеть с другими плагинами, такими как Unity player и Java-апплеты (но опять же, Apple не поддерживает их в iOS). - person Lars Blåsjö; 26.06.2011

Думаю, у меня есть решение. Используя диалог jquery-ui, потраченные часы и часы, пытаясь понять это, у меня сработало,

Логика заключалась в том, что если я не могу запустить jquery, вернуть весь флеш-контент обратно. Исследование привело меня к этой ссылке - наконец, это сработало.

Как программно установить для всех ‹object› режим 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;
}
person user659787    schedule 15.03.2011
comment
Привет, вы видели комментарий Джеймса на той же странице? Если это не повлияет, то попробую все еще раз :) - person Lasse Espeholt; 15.03.2011

Как насчет того, чтобы вручную настроить wmode на непрозрачность с помощью javascript после того, как флеш-память уже загрузилась?

person Mike Crittenden    schedule 04.10.2009

Я только что прочитал этот пост и попытался добавить параметр wmode = "opaque" в тег объекта. Это работает для IE 8. Прошу прощения, если мой пост слишком поздно.

person Tan    schedule 22.02.2011
comment
Да, это работает. Но, как я утверждаю, он мне нужен для работы с рекламой, сценарий которой я не могу контролировать. - person Lasse Espeholt; 22.02.2011

Выполните поиск в Google по запросу "iframe shim". Обычно размещение iframe за html переносит его поверх содержимого flash (игнорируя настройки wmode).

Пока-пока

person pincopallo    schedule 27.04.2011