Aller au contenu

[Résolu !] Problème flash, javascript et IE7


bensor

Messages recommandés

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 :francais:

Lien vers le commentaire
Partager sur d’autres sites

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"); ?

Lien vers le commentaire
Partager sur d’autres sites

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é).

Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

:cartonrouge:

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.

Lien vers le commentaire
Partager sur d’autres sites

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 :yes::humour: J'insiste juste parce que ça m'intéresse ton problème.

Lien vers le commentaire
Partager sur d’autres sites

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 :roll::transpi: 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 :ouioui:

Lien vers le commentaire
Partager sur d’autres sites

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);
}

Lien vers le commentaire
Partager sur d’autres sites

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);
}

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

Lien vers le commentaire
Partager sur d’autres sites

Apparement ça passe sous firefox, mais sous IE "flashroot" est undefined :transpi:

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

Lien vers le commentaire
Partager sur d’autres sites

Apparement ça passe sous firefox, mais sous IE "flashroot" est undefined :merci:

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

Lien vers le commentaire
Partager sur d’autres sites

Apparement ça passe sous firefox, mais sous IE "flashroot" est undefined :francais:

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 ?

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...
  • 2 semaines après...

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...