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:
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:
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 ?
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:
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:
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:
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!
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 ! :ccool:)...
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.:roll: que sous Firefox 8-).
Je mets la dernière main à un exemple que je pourrais mettre en ligne si des lecteurs sont intéressés...
Cordialement,
Albesoft.