2009-10-04 14 views
17

Sé que muchos han hecho esta pregunta, pero creo que mi situación es un poco diferente.Destello sobre el cuadro de diálogo de jQuery

Tengo un sitio donde tengo algunos anuncios ocultos en Flash debido a problemas de compatibilidad con xhtml/html. Pero los elementos flash están encima de mis cuadros de diálogo de jQuery, lo cual no es ideal.

Algunas soluciones han sugerido establecer wmode en opaco, pero no puedo porque mis anuncios son scripts que generan elementos flash.

Otra solución sugirió ocultar anuncios cuando se muestra un cuadro de diálogo. Entonces mi pregunta es: ¿hay alguna manera de poner contenido flash detrás de mis diálogos jQuery mientras están visibles y sin alterar el código flash?

Saludos, Lasse Espeholt

Actualización: ahora he reopned la pregunta con una recompensa. Por ahora, oculto todos los anuncios Flash en "mostrar diálogo". Pero esta aún no es una solución óptima. Por lo tanto, estoy buscando un script que pueda hacer que cada animación Flash sea opaca (una solución jQuery sería la mejor, pero una simple solución JavaScript lo hará). O si no debe haber otra solución no se discute en esta pregunta, voy a estar feliz de oír hablar de eso :)

Actualización 2: Hasta ahora, he hecho este script:

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>'); 
} 

que funciona en FF y Chrome, pero no en IE. Aparentemente, .append falla. ¿Algunas ideas?

Respuesta

13

No se puede poner HTML en frente de Flash a menos que establezca wmode en opaco (o transparente).

Con el wmode ("ventana") predeterminado, Flash Player se hace cargo de toda la representación y la interacción del usuario en su área. Entonces, el navegador no puede mostrar ningún HTML en esa área. Lo que wmode = "opaque" (o wmode = "transparent") hace es que deshabilita este comportamiento predeterminado y tipo de integra el área de Flash Player en los navegadores habituales de renderizado y estratificación, y tal.

Pero no es necesario alterar ningún contenido de Flash para configurar wmode, ya que se realiza en el HTML (o mediante SWFObject u otro script que inserta el elemento de objeto Flash) para tener control sobre los "scripts que salidas elementos flash "que mencionas, puedes ocuparte de la configuración wmode allí.

+0

no tengo control sobre los guiones. Se proporcionan y pueden cambiar cada segundo si es necesario. Tengo mis scripts en las etiquetas "iframes" . ¿Puedo configurar jQuery para editar wmode en cada objeto flash, incluidos los objetos flash dentro de "iframes"? –

+0

OK, eso está mal. No sé si podría hacer que jQuery modifique el código html del objeto flash sobre la marcha, pero alterarlo una vez que el flash se haya cargado puede requerir una recarga del flash, lo que resulta en que cada anuncio se cargue dos veces. Ocultar los anuncios cuando se muestra un diálogo parece ser la mejor solución hasta ahora, creo. –

+0

Eso es lo que he hecho ahora, gracias :) –

1

¿Qué hay de configurar manualmente wmode a opaco con javascript después de que el flash ya se haya cargado?

+0

ver mi comentario anterior :) –

1

Acabo de leer esta publicación e intenté agregar el parámetro wmode = "opaque" en una etiqueta de objeto. Funciona para IE 8. Lo siento si mi publicación es demasiado tarde.

+1

Sí, esto funciona. Pero como digo, necesito que funcione para anuncios donde no puedo controlar el script. –

2

Creo que tengo una solución. Usando el diálogo jquery-ui, Pasé horas y horas tratando de resolver esto - funcionó para mí,

La lógica fue que si no puedo hacer que el jquery vaya al frente, haga que todo el contenido flash regrese. la investigación me llevó a este enlace, finalmente funcionó.

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; 

y

if(window.onload) { 
    var onLoad = window.onload; 
    window.onload = function() { 
     onLoad(); 
     makeObjectsOpaque3(); 
    }; 
} else { 
    window.onload = makeObjectsOpaque3; 
} 
+0

Hola, ¿has visto a James comentar en la misma página? Si no afecta esto, lo intentaré todo de nuevo, entonces :) –

0

búsqueda en Google de "cuña iframe". Básicamente colocar un iframe detrás del html lo traerá sobre el contenido del flash (ignorando las configuraciones de wmode).

Bye bye

+0

¿Puedes editar para agregar más detalles que "buscar en google?" – Will

+0

Este es uno de los resultados: http://www.udm4.com/demos/extension-iframeshim.php. Puedes copiar su enfoque para resolver el problema ... – pincopallo

Cuestiones relacionadas