Envoie de variable Javascript vers flash avec ExternalInterface

Résolu
cs_jzeel Messages postés 156 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 10 mars 2011 - 12 juin 2008 à 19:36
cs_jzeel Messages postés 156 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 10 mars 2011 - 14 juin 2008 à 19:53
Bonjour à tous,

J'aimerais utilisé la fonction ExternInterface... pour que si on click un bouton d'un formulaire(javascript) que cela envoie une valeur dans une variable flash.
J'ai été voir l'aide de Flash (flash cs3)... ça à l'air compliqué, même leur l'exemple donné ne fonctionne pas à 100%... ça va faire 2h que je gosse ladessus...il y a t-il une façon simple d'utiliser ce classe "ExternalInterface"???.

Merci pour votre aide!

Jzeel

5 réponses

nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
14 juin 2008 à 04:03
Salut,

  je suis heureux que tu aies pu resoudre le pb. En fait je ne connais pas vraiment de site qui en parle vraiment ExternalInterface, (moi je prefere le ExternalInterface.call) . C'est juste que pour mon projet je devais generer du code, parser, valider et executer du code d'un pseudo-language mis au point par notre equipe pour les besoins d'une plate-forme. Et vu que le temps nous etait ecourte et qu'il fallait absolument une demo jsuis passe par la parce que j'avais besoin de creer une evaluation d'expression : javascript l'a ( fonction eval() ) mais actionscript ne la possede pas.
  Pour ce qui est du CSV , c'est comme du XML . C'est du formattage de donnees. Voici un lien wikipedia sur sa reelle definition : http://en.wikipedia.org/wiki/Comma-separated_values .
 Pour ce qui est du escape() et du XML. le XML est un format de donnees en texte clair comme du CSV. exemple:

<enregistrements>
    <enregistrement>
           <donnee id="1234-abd-494"  __nom="nom d'usager"  __value="nicky" />
           <donnee id="1234-abd-874"  __nom="login"  __value="cppfrance" />
   </enregistrement>
   <enregistrement>
          <donnee id="7894-abd-494"  __nom="nom d'usager"  __value="jzeel" />

           <donnee id="7894-abd-874"  __nom="login"  __value="actionscript_pro" />
   </enregistrement>
</enregistrements>

plus facile a comprendre et a parser. Le escape() permet d'encoder la String de sorte a ce que des caracteres genants (apostrophe,etc) ne gachent pas la transmission de donnees de javascript vers actionscript. le moyen pour ravoir le XML d'origine apres un appel a escape(0 : c'est d'utiliser unescape();

 j'espere avoir aide, Salut et bonne continuation.

http://liveplayaz.com

je suis heureux de faire partie d'une grande famille ...!
3
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
13 juin 2008 à 15:46
Salut,

un appel a ExternalInterface.call() te renvoie une String , et la fonction que tu codes en javascript doit absolument retourner une string meme si elle est vide sinon ton call()  ne marche pas. 
pour pouvoir recuperer tes donnees de javascript vers falsh je te suggeres 2 options:
1- formatages CSV(Coma Separated Values) pour des nombres , ils seront tous separes par un point-virgule, tu n'auras qu'a faire un split dans le flash.
2- format xml , puis escape() dans javascript: tu recuperes tes valeurs avec Xml.parseXML(unescape(retour_de_javascript)), et tu peux continuer ton traitement.

J'utilise la meme fonction pour creer des fonctions javascript utilitaires (comme l'evaluation d'expression, absente en actionscript) on-the-fly et recuperer le resultat en actionscript, le tout sur un projet d'entreprise super colossal. et ca marche super bien.

http://liveplayaz.com

je suis heureux de faire partie d'une grande famille ...!
0
cs_jzeel Messages postés 156 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 10 mars 2011
13 juin 2008 à 17:24
Merci beaucoup de me répondre, parce que ça a l'air qu'il n'y a pas grand mon sur ce forum qui s'y connaisse avec la classe ExternalInterface.
Oui, mon ExternalInterface.call() renvoie une String... mais j'utilise le 'addCallback'

Voici un exemple de mon code html :
<head>
<script language= "javascript">
function appel(str) {
 document.getElementById("id_flash").echo(str);
}
</script>
</head>

[# Envoie musique #1 ]

Et dans mon Flash

function echo(str:String):Void {
  my_cb.text = str;
}
ExternalInterface.addCallback("echo", null, echo);

Lorsque je l'execute mon html cela me donne un petit problème sur Explorer et Firefox, à chaque fois, il a fallu que que je fasse des modifications dans mes browsers... Et après. ça marche très bien.

L'orsque j'execute mon html... Firefox me dit :
"Flash player a interrompu une operation potentiellement risqué.
L'application nom.swf tente une communication avec le nom.html - pour permettre à cette application de communiquer cliquez sur parametres et redemarrer après avoir modifié les paramètres".

Internet Explorer me donne une erreur de script concernant cette ligne:

,

----

-- document.getElementById("id_flash").echo_1();








et l'erreur dit: Cet object ne gère pas cette propriété ou cette méthode.
Y a t-il un moyen pour que ça marche mais sans ses erreurs??? parce que les deux options que tu m'offres je les ai jamais utilisé auparavant.

Merci de ton aide!

Jzeel
0
cs_jzeel Messages postés 156 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 10 mars 2011
13 juin 2008 à 19:46
Ok ça marche... Je vien de remarqué que quand je le met directement sur le WEB tout marhe parfaitement, mais quand c'est LOCAL C'est la le problème....
Si ça marche sur le web c'est tout ce qui compte pour moi. Bien entendu si vous savez le pourquoi de ce problème LOCAL cela me fera un plaisir de l'entendre.

En passant, connais-tu des sites qui donne assez d'info sur comment utilisée tes 2 options :

 1- formatages CSV(Coma Separated Values) pour des nombres , ils seront tous separes par un point-virgule, tu n'auras qu'a faire un split dans le flash.
2- format xml , puis escape() dans javascript: tu recuperes tes valeurs avec Xml.parseXML(unescape(retour_de_javascript)), et tu peux continuer ton traitement.


Merci beaucoup, ton aide est pratique.


Jzeel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jzeel Messages postés 156 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 10 mars 2011
14 juin 2008 à 19:53
Merci beaucoup pour ton eclairage, j'apprecie.

Jzeel
0
Rejoignez-nous