bensor Posté(e) le 28 février 2008 Posté(e) le 28 février 2008 Bonjour, Voilà, j'ai une animation Flash laquelle doit être influencée en javascript par un simple bouton. Par influencée, je veux dire qu'une fonction ActionScript 2.0 doit être executée. Pour cela j'ai utilisé ExternalInterface.addCallBack(). Cela marche parfaitement sur Firefox deuxième du nom, mais sur IE 7 j'ai une belle erreur "Cet objet ne gère pas cette propriété ou cette méthode". J'ai cru comprendre que pour que cela marche sur IE7 il fallait rajouter un timer et eviter de nommer la fonction AS comme la fonction JS, ce que j'ai fait, mais rien <script type="text/javascript"> function callExternalInterface(element) { document[element].jsAction(); } </script> <embed id="root" width="304" height="60" allowscriptaccess="always" quality="high" bgcolor="#EDE9E7" name="root" src="anim.swf" type="application/x-shockwave-flash"/> <button onClick="callExternalInterface('root');">Clic</button> import mx.controls.Alert; import flash.external.*; delInterval = setInterval(doExternalInterface, 700); function doExternalInterface():Void { clearInterval(delInterval); ExternalInterface.addCallback("jsAction", null, flAction); } function flAction():Void { Alert.show('ok'); } Voyez-vous où j'ai pu me planter? Merci
Allegro Posté(e) le 28 février 2008 Posté(e) le 28 février 2008 Bonjour, Je m'y connais très peu en AS2, et quasi pas en JS. Mais si ton code marche sous Firefox, cela signifie, je pense, que le code AS est bon. Le problème devrait donc plutôt venir du code JS. Dis-moi, ton Alert.show('ok');, c'est bien du code JS ? Dans ce cas, c'est pas plutôt alert("ok"); ?
bensor Posté(e) le 28 février 2008 Auteur Posté(e) le 28 février 2008 Dis-moi, ton Alert.show('ok');, c'est bien du code JS ? Dans ce cas, c'est pas plutôt alert("ok"); ? Non non, ce n'est pas du code JS, mais du code AS, ça affiche une boite de dialogue façon "alert()" js dans le Flash. D'ailleurs si je mets un autre Alert.show() dans la fonction appelée par le timer la boite s'affiche, que ce soit sous IE 7 ou Fx Pour résumer ce que fait le code AS, dans un premier temps je lance un timer reglé sur 700ms qui va exécuter une fonction (doExternalInterface()), cette fonction va stopper le timer et transmettre au navigateur ce qu'il faut pour interagir avec une fonction, en l'occurence flAction(), par l'intermédiaire d'une fonction Javascript "fictive" (jsAction()) qui sert de passerelle entre la page et l'animation. La dernière fonction, celle appelée par le code Javascript, affiche tout bêtement une boite de dialogue Flash (tu l'as d'ailleurs deviné).
Allegro Posté(e) le 29 février 2008 Posté(e) le 29 février 2008 D'accord. Et concernant l'<embed>, es-tu obligé de l'utiliser ? Personnellement, je travaille souvent en XHTML, et utilise un <object> plus un <param> pour que le .swf fonctionne à la fois dans IE et Firefox. Par exemple : <div> <object type="application/x-shockwave-flash" data="flash.swf" width="305" height="136"> <param name="Flash" value="flash.swf" /> </object> </div> Tu peux peut-être remplacer ton <embed> par cela ?
bensor Posté(e) le 29 février 2008 Auteur Posté(e) le 29 février 2008 C'est encore pire, rien ne s'affiche sur IE7 (en revanche, pas de problèmes sur Fx)
Allegro Posté(e) le 29 février 2008 Posté(e) le 29 février 2008 Bon ben là, je ne sais pas. Mais vu que tu n'as plus de message d'erreur, le problème vient peut-être de cette partie du code avec <embed> ... En tous cas, j'ai testé mon code avec <object> et <param>, ça fonctionne sous IE7.
bensor Posté(e) le 29 février 2008 Auteur Posté(e) le 29 février 2008 Mais vu que tu n'as plus de message d'erreur, le problème vient peut-être de cette partie du code avec <embed> ... Si si, j'ai toujours le message d'erreur. La seule différence par rapport à avant c'est que l'animation ne s'affiche pas du tout, il y a juste un gros rectangle blanc à la place de ce qui devrait s'afficher.
bensor Posté(e) le 3 mars 2008 Auteur Posté(e) le 3 mars 2008 Bha alors, personne d'autre? Même sur developpez.net ils sont pas fichus de me répondre
Allegro Posté(e) le 3 mars 2008 Posté(e) le 3 mars 2008 Juste histoire de ... (qui sait, ça pourra peut-être mettre quelqu'un sur une piste ) Ton message d'erreur apparait quand tu cliques sur le bouton, pas avant ?
bensor Posté(e) le 3 mars 2008 Auteur Posté(e) le 3 mars 2008 Juste histoire de ... (qui sait, ça pourra peut-être mettre quelqu'un sur une piste )Ton message d'erreur apparait quand tu cliques sur le bouton, pas avant ? Oui oui, juste quand je clique sur le bouton
Allegro Posté(e) le 3 mars 2008 Posté(e) le 3 mars 2008 Essaie en enlevant d'abord Alert.show('ok'); Puis document[element].jsAction(); Et sous IE6, il marche ton code ? PS : si je te casse les pieds, n'hésite pas à me le dire, je ne me vexerai pas J'insiste juste parce que ça m'intéresse ton problème.
bensor Posté(e) le 3 mars 2008 Auteur Posté(e) le 3 mars 2008 Essaie en enlevant d'abord Alert.show('ok');Puis document[element].jsAction(); Et sous IE6, il marche ton code ? PS : si je te casse les pieds, n'hésite pas à me le dire, je ne me vexerai pas J'insiste juste parce que ça m'intéresse ton problème. Sous IE6 je ne sais pas, j'ai pas. Ensuite, il n'y a pas réellement un Alert.show('ok') mais toute autre chose, que je ne peux bien sûr pas balancer sur le web ni dire à quoi sert réellement l'anim en général. IE7 ne détecte pas la fonction JS balancée par l'AS, donc que je retire ou pas l'Alert.show() ne changera strictement rien
senna555 Posté(e) le 10 mars 2008 Posté(e) le 10 mars 2008 Bonsoir ci joint un exemple de code donctionnant <script language="javascript" type="text/javascript"> var flashtest; function initialize() { /* Check if the browser is IE. If so, flashVideoPlayer is window.videoPlayer. Otherwise, it's window.document.videoPlayer. The videoPlayer is the id assigned to <object> and <embed> tags. */ var ie = navigator.appName.indexOf("Microsoft") != -1; flashtest = (ie) ? window['test'] : document['test']; } function appel(str) { initialize(); flashtest.asFunc(str); } </script> <script language="javascript">AC_FL_RunContent = 0;</script> <script src="js/AC_RunActiveContent.js" language="javascript"></script> <script language="JavaScript" type="text/JavaScript"> <!-- function MM_reloadPage(init) { //reloads the window if Nav4 resized if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) { document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }} else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload(); } MM_reloadPage(true); //--> </script> </head> <body bgcolor="#ffffff"> <!--URL utilisées dans l'animation--> <!--texte utilisé dans l'animation--> <!-- saved from url=(0013)about:internet --> <div id="Layer1" style="position:absolute; left:647px; top:90px; width:81px; height:44px; z-index:1"><a href="#" onclick="appel('zaventem')"><wxcwxc</a></div> <script language="javascript"> if (AC_FL_RunContent == 0) { alert("Cette page nécessite le fichier AC_RunActiveContent.js."); } else { AC_FL_RunContent( 'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0', 'width', '550', 'height', '400', 'src', 'carte_regions', 'quality', 'high', 'pluginspage', 'http://www.macromedia.com/go/getflashplayer', 'align', 'middle', 'play', 'true', 'loop', 'true', 'scale', 'showall', 'wmode', 'window', 'devicefont', 'false', 'id', 'test', 'bgcolor', '#ffffff', 'name', 'test', 'menu', 'true', 'allowFullScreen', 'false', 'allowScriptAccess','sameDomain', 'movie', 'carte_regions', 'salign', '' ); //end AC code } </script> <noscript> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="550" height="400" id="test" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="allowFullScreen" value="false" /> <param name="movie" value="carte_regions.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /> <embed src="carte_regions.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="test" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object> </noscript> et côté FLA System.security.allowDomain("http://www.esimmo.com"); import flash.external.ExternalInterface; ExternalInterface.addCallback("asFunc", null, asFunc); function asFunc(str:String):Void { var dmccouleur = new Color(_root.str); dmccouleur.setRGB(0x10007b); }
senna555 Posté(e) le 11 mars 2008 Posté(e) le 11 mars 2008 Oups sorry ExternalInterface.addCallback("asFunc", null, asFunc); function asFunc(str:String):Void { var dmccouleur = new Color(_root[str]); dmccouleur.setRGB(0x10007b); }
bensor Posté(e) le 11 mars 2008 Auteur Posté(e) le 11 mars 2008 Bonsoirci joint un exemple de code donctionnant <script language="javascript" type="text/javascript"> var flashtest; function initialize() { /* Check if the browser is IE. If so, flashVideoPlayer is window.videoPlayer. Otherwise, it's window.document.videoPlayer. The videoPlayer is the id assigned to <object> and <embed> tags. */ var ie = navigator.appName.indexOf("Microsoft") != -1; flashtest = (ie) ? window['test'] : document['test']; } function appel(str) { initialize(); flashtest.asFunc(str); } </script> <script language="javascript">AC_FL_RunContent = 0;</script> <script src="js/AC_RunActiveContent.js" language="javascript"></script> <script language="JavaScript" type="text/JavaScript"> <!-- function MM_reloadPage(init) { //reloads the window if Nav4 resized if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) { document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }} else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload(); } MM_reloadPage(true); //--> </script> </head> <body bgcolor="#ffffff"> <!--URL utilisées dans l'animation--> <!--texte utilisé dans l'animation--> <!-- saved from url=(0013)about:internet --> <div id="Layer1" style="position:absolute; left:647px; top:90px; width:81px; height:44px; z-index:1"><a href="#" onclick="appel('zaventem')"><wxcwxc</a></div> <script language="javascript"> if (AC_FL_RunContent == 0) { alert("Cette page nécessite le fichier AC_RunActiveContent.js."); } else { AC_FL_RunContent( 'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0', 'width', '550', 'height', '400', 'src', 'carte_regions', 'quality', 'high', 'pluginspage', 'http://www.macromedia.com/go/getflashplayer', 'align', 'middle', 'play', 'true', 'loop', 'true', 'scale', 'showall', 'wmode', 'window', 'devicefont', 'false', 'id', 'test', 'bgcolor', '#ffffff', 'name', 'test', 'menu', 'true', 'allowFullScreen', 'false', 'allowScriptAccess','sameDomain', 'movie', 'carte_regions', 'salign', '' ); //end AC code } </script> <noscript> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="550" height="400" id="test" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="allowFullScreen" value="false" /> <param name="movie" value="carte_regions.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /> <embed src="carte_regions.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="test" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object> </noscript> et côté FLA System.security.allowDomain("http://www.esimmo.com"); import flash.external.ExternalInterface; ExternalInterface.addCallback("asFunc", null, asFunc); function asFunc(str:String):Void { var dmccouleur = new Color(_root.str); dmccouleur.setRGB(0x10007b); } Et tout ça ça marche sur IE7? Bizarre, étant donné que partout où je suis allé il a été dit que nommer la fonction AS et JS de la même façon ne pouvait pas fonctionner sous IE7
senna555 Posté(e) le 12 mars 2008 Posté(e) le 12 mars 2008 firefox pgm Bonjour, je pense que tu n'utilises pas la bonne version de AC_RunActiveContent.js
senna555 Posté(e) le 12 mars 2008 Posté(e) le 12 mars 2008 moi ? Oui, je pense qu'avec ceci http://www.esimmo.com/Virtual/testhugues/b...ctiveContent.js cela devrait fonctionner sous firefox
bensor Posté(e) le 13 mars 2008 Auteur Posté(e) le 13 mars 2008 Apparement ça passe sous firefox, mais sous IE "flashroot" est undefined EDIT : Bon, j'ai fait une chtite modif : function initialize() { /* Check if the browser is IE. If so, flashVideoPlayer is window.videoPlayer. Otherwise, it's window.document.videoPlayer. The videoPlayer is the id assigned to <object> and <embed> tags. */ var ie = navigator.appName.indexOf("Microsoft") != -1; if (ie) { flashroot = window['root']; } else { flashroot = document['root']; } if (flashroot == undefined) { flashroot = document['root']; } //flashroot = (ie) ? window['root'] : document['root']; } Résultat, même message d'erreur qu'avant :s
bensor Posté(e) le 13 mars 2008 Auteur Posté(e) le 13 mars 2008 En fait, c'est IE7 qui n'arrive pas à exécuter correctement window[element] sur ma page :s
senna555 Posté(e) le 14 mars 2008 Posté(e) le 14 mars 2008 Apparement ça passe sous firefox, mais sous IE "flashroot" est undefined EDIT : Bon, j'ai fait une chtite modif : function initialize() { /* Check if the browser is IE. If so, flashVideoPlayer is window.videoPlayer. Otherwise, it's window.document.videoPlayer. The videoPlayer is the id assigned to <object> and <embed> tags. */ var ie = navigator.appName.indexOf("Microsoft") != -1; if (ie) { flashroot = window['root']; } else { flashroot = document['root']; } if (flashroot == undefined) { flashroot = document['root']; } //flashroot = (ie) ? window['root'] : document['root']; } Résultat, même message d'erreur qu'avant :s un exemple de page fonctionnant http://www.esimmo.com/Virtual/testhugues/b...alisation_D.php (site en développement) Côté FLA _root.evere._visible = false; _root.schaerbeek._visible = false; _root.zaventem._visible = false; _root.boitsfort._visible = false; _root.schuman._visible = false; _root.leopold._visible = false; _root.nord._visible = false; _root.central._visible = true; _root.midi._visible = false; System.security.allowDomain("http://www.esimmo.com"); import flash.external.ExternalInterface; ExternalInterface.addCallback("mod_flash", null, mod_flash); function mod_flash(str:String,reg:String):Void { _root[str]._visible = true; _root[reg]._visible = false; } Attention à la version de AC_RunActiveContent.js
senna555 Posté(e) le 14 mars 2008 Posté(e) le 14 mars 2008 Apparement ça passe sous firefox, mais sous IE "flashroot" est undefined EDIT : Bon, j'ai fait une chtite modif : function initialize() { /* Check if the browser is IE. If so, flashVideoPlayer is window.videoPlayer. Otherwise, it's window.document.videoPlayer. The videoPlayer is the id assigned to <object> and <embed> tags. */ var ie = navigator.appName.indexOf("Microsoft") != -1; if (ie) { flashroot = window['root']; } else { flashroot = document['root']; } if (flashroot == undefined) { flashroot = document['root']; } //flashroot = (ie) ? window['root'] : document['root']; } Résultat, même message d'erreur qu'avant :s Tu n'oublies pas de déclarer flashroot comme variable globale ?
bensor Posté(e) le 22 mars 2008 Auteur Posté(e) le 22 mars 2008 Non non, je n'oublie pas. Bon, pour l'instant je n'ai plus le temps de m'en occuper, je repasserai peut-être ici prochainement
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.