2009-10-04 4 views
17

Я знаю, что многие задали этот вопрос, но я думаю, что моя ситуация немного отличается.Вспышка в диалоговом окне jQuery

У меня есть сайт, на котором у меня есть некоторые объявления, которые скрыты в Flash из-за проблем с совместимостью xhtml/html. Но flash-элементы находятся поверх моих диалогов jQuery, которые не идеальны.

Некоторые решения предложили установить wmode на непрозрачный, но я не могу, потому что мои объявления - это скрипты, которые выводят элементы вспышки.

Еще одно решение предложило скрывать объявления при отображении диалога. Поэтому мой вопрос: есть ли способ разместить flash-контент за мои диалоги jQuery, пока они видны и не изменяют код флэш-памяти?

С наилучшими пожеланиями, Лассе Espeholt

Update: Я теперь reopned вопрос с щедростью. На данный момент я скрываю каждое Flash-объявление в диалоговом окне «show dialog». Но это все еще не оптимальное решение. Итак, я ищу скрипт, который может сделать каждую флеш-анимацию непрозрачной (решение jQuery будет приятнее, но простое решение для JavaScript). Или, если должно быть другое решение не обсуждалось в этом вопросе, я буду рад услышать об этом :)

Update 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 терпит неудачу. Есть идеи?

ответ

13

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

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

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

+0

У меня нет контроля над сценариями. Они предоставляются и могут меняться каждую секунду, если это необходимо. У меня есть мои скрипты в тегах iframes . Могу ли я настроить jQuery для редактирования wmode в каждом объекте flash, включая flash-объекты внутри «iframes»? –

+0

Хорошо, это плохо. Я не знаю, можно ли jQuery изменить html-код Flash-объекта на лету, но изменить его после загрузки флэш-памяти может потребоваться перезагрузка Flash, я думаю, что в результате каждое объявление загружается дважды. Думаю, скрыть объявления, когда отображается диалог, кажется лучшим решением. –

+0

Это то, что я сделал сейчас, спасибо :) –

1

Как насчет ручной настройки wmode на непрозрачный с javascript после того, как вспышка уже загружена?

+0

Смотрите мой комментарий выше :) –

1

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

+1

Да, это работает. Но, как я утверждаю, мне нужно, чтобы он работал для рекламы, где я не могу контролировать сценарий. –

2

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

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

How do I programmatically set all <object>'s to have the wmode set to opaque?

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; 
} 
+0

Привет, вы видели Джеймса на той же странице? Если это не повлияет на это, я попробую их все снова: –

0

Поиск Google для "IFrame прокладки". В принципе, размещение iframe за html приведет к его содержимому (игнорируя настройки wmode).

Bye свидания

+0

вы можете изменить, чтобы добавить больше деталей, чем «искать в Google»? – Will

+0

Это один из результатов: http://www.udm4.com/demos/extension-iframeshim.php. Вы можете скопировать его подход, чтобы решить проблему ... – pincopallo

Смежные вопросы