IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Modifier paramètre d'un objet flash avec Javascript


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Modifier paramètre d'un objet flash avec Javascript
    Bonjour à tous!

    Je pense que c'est un problème facile pour les pro du javascript (ce que je ne suis pas!) :

    Au chargement de ma page web, je compte charger les paramètres d'une animations flash.

    Voici mon objet flash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="382" height="250">
          <param name="movie" value="gallery.swf">
          <param name="quality" value="high">
          <param name=FlashVars  value="" id="flashGalleryParam">
          <embed flashvars="" src="gallery.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="382" height="250" id="flashGalleryEmbed"></embed>
        </object>
    et voici la fonction javascript fautive qui est appelée au démarrage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function getFlashParam()
    {
    	var flashGalleryP = document.getElementById("flashGalleryParam");
    	var flashGalleryE = document.getElementById("flashGalleryEmbed");
     
    	flashGalleryP.setAttribute("value", "mainColor=0x028698"); 
    	flashGalleryE.setAttribute("flashvars", "mainColor=0x028698"); 
    }
    L'objet flashGalleryP semble fonctionner, mais j'obtiens une erreur dans IE pour flashGalleryE ( 'null' a la valeur Null ou n'est pas un objet).

    Ai-je la bonne méthode pour changer l'attribut flashvars de la balise embed ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    Ca a peut-être évolué depuis, mais j'avais fait un truc comme toi il y a quelques années, avec une légère différence.

    Pour passer les params à OBJET, c'était bien par le tag PARM.

    Par contre, pour les params à EMBED, c'était via src.
    Soit pour ton cas : 'gallery.swf?flashvars=...'

    Mais en lisant ce que tu as écrit, je me demande quel est le nom de ta variable en flash ?
    Si c'est 'mainColor', je crois que tu aura un soucis.
    Le name de ton PARAM aurait du être 'mainColor' et la value '0x028698' et non pas FlashVars, tandis que le src de EMBED deviendrait 'gallery.swf?mainColor=0x028698' et l'attribut FlashVars disparait.

    C'est peut-être pourquoi IE ne veut pas de cet attribut...

  3. #3
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Utiliser src donne le même résultat...
    En fait le "résultat final" devrait donner ceci si je n'utilisais pas de javascript(j'ai testé et c'est les bons paramètres) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="382" height="250">
            <param name="movie" value="gallery.swf">
            <param name="quality" value="high">
            <PARAM NAME=FlashVars  VALUE="mainColor=0xdbd203">
            <embed FlashVars="mainColor=0xdbd203" src="gallery.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="382" height="250"></embed>
          </object>
    Flashvar c'est une des façon possible de passer des variables d'une page html à un animation flash (extrait de l'aide de Flash :
    "L'emploi de FlashVars pour faire passer des variables dans Flash est similaire à l'emploi d'URL dans le code HTML. Avec FlashVars, au lieu d'être à la suite du nom de fichier, les variables sont transmises dans une balise param distincte, ainsi que dans une balise embed."
    )

    Mais bon, passer des paramètres dans la balise Src de embed et de value pour le param movie est similaire.

    J'ai donc modifier mon code pour essayer ta proposition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function getFlashParam()
    {
    	var flashGalleryP = document.getElementById("flashGalleryParam");
    	var flashGalleryE = document.getElementById("flashGalleryEmbed");
     
    	flashGalleryP.setAttribute("value", "gallery.swf?mainColor=0x028698"); 
    	flashGalleryE.setAttribute("src", "gallery.swf?mainColor=0x028698);
    }
    et l'objet flash :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="382" height="250">
          <param name="movie" value="" id="flashGalleryParam">
          <param name="quality" value="high">
          <embed src="" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="382" height="250" id="flashGalleryEmbed"></embed>
        </object>
    Mais avec cette solution, j'obtiens la même erreur pour flashGalleryE ( 'null' a la valeur Null ou n'est pas un objet).

    De plus, j'ai lu quelque part qu'IE digère mal les balises qui ont à la fois name et id.
    Je ne peux pas me contenter de "movie" puisque j'ai d'autres animations flash dans ma page. Donc j'ai des doutes de ce côté...

    Autre détail (qui n'est sans doute pas lié à mon problème) j'ai remarqué que si je laisse value="" et src="" dans ma page html, IE ne réussi pas à charger ma page (faut préciser que ma fonction getFlashParam() est chargé dans un event onLoad). Je dois donc mettre une valeur par défaut dans value="" et src="" pour que IE puisse charger la page et exécuter le script javascript. Embêtant.

    Je n'ai pas encore précisé que le code javascript original fonctionne bien sous firefox, mais pas sous IE (dommage que 90% des internaute utilisent ce navigateur sinon, je ne me donnerais pas tout ce mal!!!)

    Donc si quelqu'un a d'autres suggestions, elles seront plus que bienvenu!

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    Pour ton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    flashGalleryP.setAttribute("value", "gallery.swf?mainColor=0x028698");
    Je ne pensais pas à ça...

    mais à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    <param name="mainColor" value="" id="flashGalleryParam">
    ...
     
    puis :
    flashGalleryP.setAttribute("value", "0x028698");
    Je ne connaissais pas FlashVars. Ca devrait fonctionner avec, puisque Macromedia le dit.

    En revanche, un truc me perturbe : Si ton swf est chargé avant que tu ne place tes paramètres, ton swf risque de s'exécuter sans prendre en compte tes paramètres (Il est déjà chargé).
    Perso, je charge mes objets swf par l'intermédiaire d'un objet JS en lui transmettant les paramètres et l'adresse du swf. Cet objet ce charge de composer l'ensemble des tags et des valeurs à la génération de la page.
    quelque chose du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JSFlash.load("machin.swf", {parm1:23, parm2:"FFAA08"});
    Sur ce genre d'approche, on peut tout aussi bien imager que cet objet puisse modifier le contenu d'un id pour une exécution de type onload.

    En espérant que cela puisse t'inspirer

  5. #5
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci!

    Tu m'as aiguillé vers la solution. Je n'ai pas trouvé de référence à un objet JSFlash, mais j'ai utilisé la fonction innerHTML.

    Pour ceux que ça intéresse, j'ai modifié mon code html en enlevant la balise pour flash <object>:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <div id="flashObject"></div>
    Dans ma fonction javascript, j'ai généré dynamiquement le code html:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var flashHtml = "<OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' ";
    flashHtml += "codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0'";
    flashHtml += " WIDTH='382' HEIGHT='250'>";
    flashHtml += "<PARAM NAME=movie VALUE='gallery.swf?mainColor=0x028698' id='flashGalleryParam'>";
    flashHtml += "<PARAM NAME=quality VALUE=high>";
    flashHtml += "<EMBED src='gallery.swf?mainColor=0x028698&' quality=high WIDTH='382' HEIGHT='250'";
    flashHtml += " TYPE='application/x-shockwave-flash' PLUGINSPAGE='http://www.macromedia.com/go/getflashplayer'></EMBED>";
    flashHtml += "</OBJECT>";
    document.getElementById('flashObject').innerHTML = flashHtml;
    Éventuellement, je vais remplacer la valeur de mainColor par une variable de mon script. Mais l'important c'est que ça marche sur Firefox et sous IE.

    Seule ombre au tableau, innerHTML ne fait pas partie des spécification W3C. innerHTML semble avoir été introduit par Microsoft et ensuite intégré par les autres navigateur (c'est peut-être pour cette raison que getElementById ne fonctionne pas bien???).

    Si quelqu'un veut me donner des conseils supplémentaire (ex. comment ne pas utiliser innerHTML) ce sera le bienvenu autrement je mettrai cette discussion comme étant résolu.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    Normal. JSFlash est sur mes disques
    Ca n'était qu'à titre d'exemple, pour t'inspirer.

    innerHTML est apparu à partir de IE4. Puis Netscape 6 l'a introduit, en pleine bataille du DHTML.
    innerHTML ne fait pas parti du DOM (DOM-1 à l'époque. Pénible car mal porté sur les navigateurs), mais des objets JS. Son implémentation s'est effectuée sur "demande" des développeurs.

    Des propositions de substitutions se trouvent ici :
    http://www.w3.org/TR/2008/WD-WCAG20-...103/SCR21.html

    Cependant, on le trouve introduit (enfin ?) dans la proposition HTML5 :
    http://www.w3.org/TR/2009/WD-html5-20090212/dom.html

    http://dev.w3.org/html5/spec/Overview.html

    Il aura fallu 10ans pour que le W3C réponde à la demande des développeurs. lol

  7. #7
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 16
    Points : 55
    Points
    55
    Par défaut Et avec un peu d'AJAX ???
    Bonjour,
    je suis nouveau sur ce forum mais j'ai rencontré le même genre de problème :
    Sur une page, j'affiche un texte dans lequel les titres de chansons appellent un lecteur flash.

    La difficulté vient du fait qu'il ne faudrait avoir qu'un seul lecteur (et non un lecteur par lien...) et que, lorsqu'on utilise une balise <embed>, l'objet est défini au chargement et ses propriétés ne sont accessibles qu'en lecture...

    La solution que j'ai adoptée est, au clic sur le titre de la chanson, d'appeler une fonction javascript en lui transmettant le nom du fichier à lire (par exemple un mp3).
    Cette fonction appelle, par une http_request, un "serveur" en php qui va créer la balise <embed> avec les bons paramètres (j'ai essayé en choisissant les skins, en demandant la lecture d'un extrait de la musique : çà marche ! )...
    Au retour de la requete AJAX, on récupère (en mode texte, c'est plus facile) le code que l'on insère (grâce à un innerHTML) dans la <div> qui contient le lecteur.

    En mettant par exemple l'autostart à "true", le lecteur démarre automatiquement.
    Avantages, entre autres : si un morceau était précédemment en écoute, il s'arrête et est remplacé par le nouveau (pas de superposition de musiques !)

    Autre simplification majeure : l'emploi de la librairie "prototype.js" qui facilite énormément l'écriture avec un "Ajax.Updater" qui fait tout le travail à notre place et qui a l'avantage de fonctionner aussi bien sous I.E. que sous Firefox .

    Je mets la dernière main à un exemple que je pourrais mettre en ligne si des lecteurs sont intéressés...

    Cordialement,
    Albesoft.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer objet flash avec le DOM
    Par JohnSly dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/06/2010, 14h11
  2. Appeller un objet Flash depuis javascript
    Par pmithrandir dans le forum Flash
    Réponses: 1
    Dernier message: 23/06/2010, 19h46
  3. Contrôle flash avec javascript
    Par Jozef Chamo dans le forum Flash
    Réponses: 0
    Dernier message: 09/11/2008, 02h23
  4. [POO] Changer la source d'un objet (flash) en Javascript
    Par thomine dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 11/02/2008, 16h54
  5. [POO] Rendre invisible un objet Flash en Javascript
    Par tafkap dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/10/2004, 19h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo