J'ai un soucis avec IE et getElementsByTagName.
En fait, je développe un genre de ligthbox pas que pour des images (image, contenu ajax, object quelconques ou encore iframe) et j'ai un bout de code qui permet d'afficher un fond opaque transparent.
Le truc c'est que les flash sans wmode (ou les select sur IE) passe par dessus. Donc comme lightbox, je les masque quand j'affiche mon overlay.
J'ai voulu rajouté un test pour ne pas masquer les flash qui ont un wmode correcte (car ça sert à rien de les masquer!) donc à un moment je fais un getElementsByTagName('object') puis je boucle sur la liste (en utilisant là notation item() et là, tout va bien) et dans ma boucle, je boucle (encore!) sur element.getElementsByTagName('param'). Et là c'est le drâme, IE me renvoi toutes les balises param de la page.... :'(
Voilà mon code :
Bon j'ai trouvé un solution provisoire qui consiste à mettre
J'ai trouvé un problème similaire sur le forum mais le lien où devait se trouver la solution ne marche plus...
(et même que l'adresse du site ramène vers de site porno :s )
En fait, je développe un genre de ligthbox pas que pour des images (image, contenu ajax, object quelconques ou encore iframe) et j'ai un bout de code qui permet d'afficher un fond opaque transparent.
Le truc c'est que les flash sans wmode (ou les select sur IE) passe par dessus. Donc comme lightbox, je les masque quand j'affiche mon overlay.
J'ai voulu rajouté un test pour ne pas masquer les flash qui ont un wmode correcte (car ça sert à rien de les masquer!) donc à un moment je fais un getElementsByTagName('object') puis je boucle sur la liste (en utilisant là notation item() et là, tout va bien) et dans ma boucle, je boucle (encore!) sur element.getElementsByTagName('param'). Et là c'est le drâme, IE me renvoi toutes les balises param de la page.... :'(
Voilà mon code :
Mx.ContentBox.Fixer = {
elements: ['object','embed','select'],
on: function () {
Mx.ContentBox.Fixer.changeElements('hidden');
},
off: function () {
Mx.ContentBox.Fixer.changeElements('visible');
},
changeElements: function(action){
for(var i=0; i<Mx.ContentBox.Fixer.elements.length;i++) {
if (Mx.ContentBox.Fixer.elements[ i]=='select' && !Mx.Browser.IE6) continue;
var el = document.getElementsByTagName(Mx.ContentBox.Fixer.elements[ i]);
for (var j=0;j<el.length;j++) {
var item = el.item(j);
var change = true;
//alert('init');
if (Mx.ContentBox.Fixer.elements[ i]=='object') {
//alert(el[j].getAttribute('data')+' : '+el[j].innerHTML);
var params = item.getElementsByTagName('param');
for (var c=0;c<params.length;c++) {
var param = params.item(c);
//alert(item.getAttribute('data')+' : '+param.getAttribute('name')+' = '+param.getAttribute('value'));
if (param.getAttribute('name') == 'wmode' && param.getAttribute('value') == 'transparent') { change = false;}
}
} else if (Mx.ContentBox.Fixer.elements[ i]=='embed' && item.getAttribute('wmode') == 'transparent') { change = false;}
if (change==true) { item.style.visibility = action };
}
}
}
}
Bon j'ai trouvé un solution provisoire qui consiste à mettre
if (Mx.Browser.IE && param.parentNode != item) continue;
dans la boucle sur les params pour savoir si la param appartient bien à l'object en cours...J'ai trouvé un problème similaire sur le forum mais le lien où devait se trouver la solution ne marche plus...
