2009-10-04 2 views
17

So che molti hanno fatto questa domanda, ma penso che la mia situazione sia leggermente diversa.Flash in cima alla finestra di dialogo jQuery

Ho un sito in cui ho alcuni annunci che sono nascosti in Flash a causa di problemi di compatibilità xhtml/html. Ma gli elementi flash sono in cima alle mie finestre di dialogo jQuery che non è l'ideale.

Alcune soluzioni hanno suggerito di impostare wmode su opaco ma non posso perché i miei annunci sono script che emettono elementi flash.

Un'altra soluzione suggerisce di nascondere gli annunci quando viene visualizzata una finestra di dialogo. Quindi la mia domanda è: c'è un modo per mettere il contenuto flash dietro i miei dialoghi jQuery mentre sono visibili e senza alterare il codice flash?

Con i migliori saluti, Lasse Espeholt

Aggiornamento: Ora ho reopned la questione con una taglia. Per ora, nascondo ogni annuncio Flash su "mostra dialogo". Ma questa non è ancora una soluzione ottimale. Quindi, sto cercando uno script che possa rendere opache tutte le animazioni Flash (una soluzione jQuery sarebbe più bella, ma una semplice soluzione JavaScript lo farà). O se ci dovrebbe essere un'altra soluzione non discusso in questa questione, sarò felice di sentire su di esso :)

Aggiornamento 2: Finora, ho fatto questa 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>'); 
} 

che funziona in FF e Chrome ma non in IE. Apparentemente, .append fallisce. Qualche idea?

risposta

13

Non è possibile inserire HTML davanti a Flash se non si imposta wmode su opaco (o trasparente).

Con il wmode predefinito ("finestra"), il Flash Player rileva tutta l'interazione di rendering e utente nella propria area. Quindi il browser non può visualizzare alcun codice HTML in quell'area. Quello che wmode = "opaque" (o wmode = "transparent") fa è che disabilita questo comportamento predefinito e integra l'area di Flash Player nel solito rendering e stratificazione dei browser e così via.

Ma non è necessario modificare alcun contenuto Flash per impostare wmode, poiché è fatto nell'HTML (o tramite SWFObject o altri script che inseriscono l'elemento dell'oggetto Flash) quindi se si ha il controllo sugli "script che emette elementi flash "che menzioni, puoi occuparti delle impostazioni wmode lì.

+0

Non ho il controllo sugli script. Sono forniti e possono cambiare ogni secondo se necessario. Ho i miei script in tag "iframes" . Posso impostare jQuery per modificare wmode in ogni oggetto flash compresi gli oggetti flash all'interno di "iframe"? –

+0

OK, va male. Non so se si possa fare in modo che jQuery modifichi al volo il codice html dell'oggetto Flash, ma modificarlo una volta caricato il flash potrebbe richiedere un ricaricamento del flash, penso, con il risultato che ogni annuncio viene caricato due volte. Nascondere gli annunci quando viene visualizzata una finestra di dialogo sembra la soluzione migliore finora, penso. –

+0

Questo è quello che ho fatto ora, grazie :) –

1

Come impostare manualmente wmode su opaco con javascript dopo che il flash è già stato caricato?

+0

Vedi il mio commento di cui sopra :) –

1

Ho appena letto questo post e ho provato ad aggiungere il parametro wmode = "opaco" in un tag oggetto. Funziona per IE 8. Mi dispiace se il mio post è troppo tardi.

+1

Sì, questo funziona. Ma come dichiaro, ho bisogno che funzioni per gli annunci in cui non riesco a controllare lo script. –

2

penso di avere una soluzione. Usando la finestra di dialogo jquery-ui, ho passato ore e ore a cercare di capirlo,

La logica era che se non riesco a far andare avanti il ​​jQuery, fai tornare tutti i contenuti in flash. la ricerca mi ha portato a questo link - finalmente finalmente ha funzionato.

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; 

e

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

Ciao, hai visto James commentare sulla stessa pagina? Se non influisce su questo, proverò di nuovo tutti allora :) –

0

ricerca su Google per "iframe shim". Fondamentalmente mettere un iframe dietro l'html lo porterà sul contenuto flash (ignorando le impostazioni wmode).

Bye bye

+0

puoi modificare per aggiungere più dettagli di "ricerca google per?" – Will

+0

Questo è uno dei risultati: http://www.udm4.com/demos/extension-iframeshim.php. Puoi copiare il suo approccio per risolvere il problema ... – pincopallo