11548 sujets

JavaScript, DOM et API Web HTML5

Salut à tous,

Aujourd'hui, un problème de fantômes:

CE QUE JE VEUX FAIRE

Une page avec plusieurs objets flash (ce sont des graphiques), avec la possibilités de déplacer ces objets dans la page, grâce à du javascript qui changent le DOM. Cela marche avec FF. Les objets flash sont décrits en méthode Flash Satay, donc valides. Mais le problème ne vient pas de là je pense car cela le faisait déjà en méthode non-compliant.

upload/6514-good.png

CE QUI SE PASSE

Avec IE, lors d'un déplacement du DIV qui contient l'objet flash, le div bouge bien, et son contenu également, mais malheureusement l'objet flash apparait maintenant BLANC et le navigateur cherche à charger quelque chose, qu'il n'arrive pas manifestement (le petit drapeau d'IE bouge pendant un long temps) Smiley eek

upload/6514-bad.png

LE CODE

HTML:

<div class=\"nodecontainer\" id=\"node_$var\">
  <div class=\"visible\" id=\"nodecontent_$var\">
     <object
              type=\"application/x-shockwave-flash\" data=\"charts/$chartType[1]\"
              width=\"780\" height=\"400\">
              <param name=\"FlashVars\" value=\"&amp;dataURL=$strDataURL\" />
              <param name=\"movie\" value=\"charts/$chartType[1]\" />
              <param name=\"wmode\" value=\"transparent\" />
            </object>
        </div>
      </div>


(J'ai viré tout le PHP autour pour ne laisser que l'essentiel)

JavaScript


function moveNodeUp(ref)
  {
    //we create a new node and append it
    var div = parent.document.getElementById("node_"+ref);
    var new_place = div.previousSibling;
    if (new_place != null)
    {
      var new_node = div.cloneNode(true);
      div.parentNode.insertBefore(new_node,new_place);
      //we delete the node
      div.parentNode.removeChild(div);
    }
  }
  
  function moveNodeDown(ref)
  {
    //we create a new node and append it
    var div = parent.document.getElementById("node_"+ref);
    var new_place = div.nextSibling;
    if (new_place != null)
    {
      var new_node = div.cloneNode(true);
      div.parentNode.insertBefore(new_node,new_place.nextSibling);
      //we delete the node
      div.parentNode.removeChild(div);
    }
  }


CSS:

.nodecontainer
{
  width: 98.6%;
  text-align: center;
}

.visible
{
  display: inline;
}


Merci de votre aide d'avance !!! Smiley biggrin
Modifié par vinzzonline (13 Jul 2006 - 13:24)
Bon, en diagnostiquant un peu plus le sujet, je sui tombé sur une chose que je ne comprends pas:

En fait, lors du clone de l'objet, les enfants PARAM de l'OBJECT disparaissent mystérieusement. De meme, il est impossible d'accèder à ces nodes PARAM !!!

Je ne sais pas pourquoi, mais au niveau du javascript, l'ensemble de l'element OBJECT se réduit à:

<object .....></object>

et rien dedans Smiley eek

Quelqu'un sait pourquoi, et eventuellement un remède ?
J'ai résolu mon problème en transformant le OBJECT en EMBED et la ça fonctionne. IE ne propage pas les PARAM avec innerHTML. Allez savoir pourquoi.... Smiley fache