2009-10-04 8 views
17

Je sais que beaucoup ont posé cette question, mais je pense que ma situation est un peu différente.Flash en haut du dialogue jQuery

J'ai un site où j'ai des annonces qui est caché Flash dans un à cause de problèmes de compatibilité xhtml/html. Mais les éléments flash sont au dessus de mes dialogues jQuery ce qui n'est pas idéal.

Certaines solutions ont suggéré de définir wmode sur opaque, mais je ne peux pas parce que mes annonces sont des scripts qui produisent des éléments flash.

Une autre solution a suggéré de masquer les annonces lorsqu'une boîte de dialogue est affichée. Donc ma question est: Y at-il un moyen de mettre le contenu flash derrière mes boîtes de dialogue jQuery alors qu'ils sont visibles et sans altérer le code flash?

Meilleures salutations, Lasse Espeholt

Mise à jour: Je suis maintenant reopned la question avec une prime. Pour le moment, je cache chaque annonce Flash sur "show dialog". Mais ce n'est toujours pas une solution optimale. Donc, je suis à la recherche d'un script qui peut rendre toutes les animations Flash opaques (une solution jQuery serait la plus belle, mais une simple solution JavaScript suffira). Ou s'il devrait y avoir une autre solution pas discuté dans cette question, je serai heureux d'entendre parler :)

Mise à jour 2: Jusqu'à présent, je me suis fait ce 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>'); 
} 

qui fonctionne en FF et Chrome mais pas en IE. Apparemment, .append échoue. Des idées?

Répondre

13

Vous ne pouvez pas placer HTML devant Flash, sauf si vous avez défini wmode sur opaque (ou transparent). Avec le mode wmode par défaut ("window"), Flash Player prend en charge toutes les fonctions de rendu et d'interaction de l'utilisateur dans sa zone. Le navigateur ne peut donc afficher aucun code HTML dans cette zone. Ce que wmode = "opaque" (ou wmode = "transparent"), c'est qu'il désactive ce comportement par défaut et intègre en quelque sorte la zone Flash Player dans les navigateurs de rendu et de superposition habituels et autres. Mais vous n'avez pas besoin de modifier le contenu Flash pour définir wmode, car cela est fait dans le HTML (ou via SWFObject ou un autre script qui insère l'élément Flash) si vous avez le contrôle sur les scripts qui sorties des éléments flash "que vous mentionnez, vous pouvez prendre soin du réglage wmode là.

+0

Je n'ai pas de contrôle sur les scripts. Ils sont fournis et peuvent changer chaque seconde s'il le faut. J'ai mes scripts dans "iframes" tags. Puis-je définir jQuery pour éditer wmode dans chaque objet flash, y compris les objets flash dans "iframes"? –

+0

OK, c'est mauvais. Je ne sais pas si vous pouvez faire jQuery modifier le code html de l'objet flash à la volée, mais le modifier une fois le flash chargé peut nécessiter un rechargement du flash, je pense, ce qui entraîne le chargement de chaque annonce deux fois. Cacher les publicités lorsqu'une boîte de dialogue est affichée semble être la meilleure solution à ce jour, je pense. –

+0

C'est ce que j'ai fait maintenant, merci :) –

1

Que diriez-vous de régler manuellement wmode sur opaque avec javascript après le chargement du flash?

+0

Voir mon commentaire ci-dessus :) –

1

Je viens de lire ce post et j'ai essayé d'ajouter le paramètre wmode = "opaque" dans un tag d'objet. Cela fonctionne pour IE 8. Je suis désolé si mon poste est trop tard.

+1

Oui, cela fonctionne. Mais comme je le dis, j'en ai besoin pour travailler sur des publicités où je ne peux pas contrôler le script. –

2

Je pense que j'ai une solution. Utilisation de la boîte de dialogue jquery-ui, passé heures et heures à essayer de comprendre cela - travaillé pour moi,

Logique était si je ne peux pas faire la jquery aller de l'avant, faire revenir tout le contenu flash. la recherche m'a emmené à ce lien - finalement finalement cela a fonctionné.

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; 

et

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

Salut, avez-vous vu James commenter sur la même page? Si cela n'affecte pas cela, je vais les essayer à nouveau alors :) –

0

Recherche google pour "shim iframe". Fondamentalement, mettre un iframe derrière le code HTML va l'amener sur le contenu flash (en ignorant les paramètres wmode).

Bye bye

+0

pouvez-vous modifier pour ajouter plus de détails que "rechercher google pour?" – Will

+0

Voici l'un des résultats: http://www.udm4.com/demos/extension-iframeshim.php. Vous pouvez copier son approche pour résoudre le problème ... – pincopallo