Précédent   Forum du club des développeurs et IT Pro > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 31/10/2008, 23h44   #1
Mafate
Invité régulier
 
Inscription : janvier 2005
Messages : 43
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Deux Sèvres (Poitou Charente)

Informations forums :
Inscription : janvier 2005
Messages : 43
Points : 9
Points : 9
Par défaut Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une. . .

Bonsoir à tous,

j'ai un problème avec un flash contenant de l'ActionScript 3. Ce Flash fonctionne correctement sous Firefox et IE6, mais malheureusement pas sous IE7.

Je résume ce que je cherche à faire : j'ai une page HTML qui contient une carte de France en Flash découpée en régions cliquables. Lorsque le visiteur clique sur une des régions, le navigateur ouvre une nouvelle page HTML à laquelle sont transmises en POST des variables calculées directement dans mon Flash ou récupérées depuis le formulaire HTML via une fonction JavaScript.

Tout se passe bien avec Firefox et IE6, mais IE7 me retourne l'erreur suivante lorsque je clique sur l'une des régions de ma carte :

Citation:
TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.
at zzzzPost_fla::MainTimeline/sourisUp()
Cette erreur est apparemment souvent rencontrée au vu du nombre de réponses que renvoie Google, mais malheureusement je ne trouve pas pour autant mon bonheur... Je fais donc appel à vos compétences ! Voici mon code :

1 - Dans la page HTML pour y insérer le Flash, avec un traitement spécifique pour IE et un second pour les autres navigateurs :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!--[if IE]>
	<object type="application/x-shockwave-flash" data="./flash/zzzzPost.swf" width="350" height="293.8" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="ma_carte">
		<param name="movie" value="./flash/zzzzPost.swf" />
		<param name="wmode" value="transparent" />
		<param name="quality" value="high">
		<p><a href="http://get.adobe.com/fr/flashplayer/">Télécharger gratuitement Adobe Flash Player</a></p>
	</object>
<![endif]-->
 
<!--[if !IE]> <-->
	<object class="objet" type="application/x-shockwave-flash" data="./flash/zzzzPost.swf" width="350" height="293.8">
		<param name="movie" value="./flash/zzzzPost.swf" />
		<param name="wmode" value="transparent" /> 
		<param name="quality" value="high">
		<p><a href="http://get.adobe.com/fr/flashplayer/">Télécharger gratuitement Adobe Flash Player</a></p>
	</object>
<!--> <![endif]-->
2 - Dans le Flash lui-même (ActionScript 3) pour rediriger le visiteur vers une nouvelle page lorsqu'il clique sur la carte en Flash :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import flash.net.URLRequest;  
import flash.net.URLVariables;  
import flash.net.URLRequestMethod;
import flash.external.ExternalInterface;
 
// Evenements déclenchés lorsqu'un clic sur l'objet est relaché.
function sourisUp(evt:MouseEvent)
{
	// Récupération du tableau retourné par la fonction JavaScript valeurElements().
	var valeurElements:Array;
	valeurElements = ExternalInterface.call("valeurElements");
 
	// Page PHP cible.  
	var adresse:URLRequest = new URLRequest("./mapage.php");  
 
	// Variables à envoyer.
	var variables:URLVariables = new URLVariables();  
	variables.type_entite = typeEntite;  
	variables.code_entite = codeEntite;  
	variables.type_evenement = valeurElements[0];
	variables.date_evenement = valeurElements[1];
 
	// On passe les variables à l'adresse.
	adresse.data = variables;  
 
	// Méthode d'envoi. 
	adresse.method = URLRequestMethod.POST;
 
	// Envoi de l'URL.
	navigateToURL(adresse, "_self");
 
}
En espérant que cela inspire quelqu'un, je ne vois pas ce qui peut avoir une valeur null là-dedans...

Merci d'avance !
Mafate est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2008, 22h54   #2
IP-Fix
Membre éprouvé
 
Avatar de IP-Fix
 
Inscription : mars 2006
Messages : 421
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 421
Points : 453
Points : 453
Envoyer un message via MSN à IP-Fix
A mon avis sa peux venir du javascript , test valeurElements[0] et valeurElements[1] en les traçant pour voir ( en testant avant s'ils sont null )

Code :
1
2
3
4
5
6
7
8
9
10
if( valeurElements[0] != null ){
    trace( 'valeurElements[0] not null' );
 
     if( valeurElements[1] != null )
            trace( 'valeurElements[1] not null' );
     else 
        trace( 'valeurElements[1] is null' );
}
else 
    trace( 'valeurElements[0] is null' );
si c'est pas ça alors je vois pas trop
__________________
Mon nouveau blog : Flash-Dungeon : AS3 / Objectif-C
IP-Fix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2008, 13h18   #3
Mafate
Invité régulier
 
Inscription : janvier 2005
Messages : 43
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Deux Sèvres (Poitou Charente)

Informations forums :
Inscription : janvier 2005
Messages : 43
Points : 9
Points : 9
Salut IP-Fix,

Merci pour ta réponse. Effectivemment ! Tout se passe bien si je mets en commentaire les deux lignes suivantes dans mon code ActionScript :

Code :
1
2
variables.type_evenement = valeurElements[0];
variables.date_evenement = valeurElements[1];
Le code ActionScript n'arrive donc pas, sous IE7, à récupérer le tableau retourné par ma fonction JavaScript. Pour test, j'ai créé la fonction JavaScript suivante volontairement très simple, et l'ai appelée à la place de l'autre dans le code ActionScript.

Code :
1
2
3
4
5
function valeurElements2()
{
	alert('Hello !');
	return 999;
}
Le code dans mon Flash étant alors :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Evenements déclenchés lorsqu'un clic sur l'objet est relaché.
function sourisUp(evt:MouseEvent)
{
	// Récupération du tableau retourné par la fonction JavaScript valeurElements().
	var valeurElements:String;
	valeurElements = ExternalInterface.call("valeurElements2");
 
	// Page PHP cible.  
	var adresse:URLRequest = new URLRequest("./mapage.php");  
 
	// Variables à envoyer.
	var variables:URLVariables = new URLVariables();  
	variables.type_entite = typeEntite;  
	variables.code_entite = codeEntite;  
	variables.type_evenement = valeurElements;
	variables.date_evenement = valeurElements;
 
	// On passe les variables à l'adresse.
	adresse.data = variables;  
 
	// Méthode d'envoi. 
	adresse.method = URLRequestMethod.POST;
 
	// Envoi de l'URL.
	navigateToURL(adresse, "_self");
 
}
Résultat : lorsque je clique sur ma carte, je suis à présent bien redirigé vers mapage.php, mais les deux variables $_POST['type_evenement'] et $_POST['date_evenement'] ont null pour valeur et le 'Hello !' ne s'affiche pas. Evidemment, tout se passe bien sous Firefox.

La question est donc maintenant : comment rendre visible ma fonction JavaScript depuis mon ActionScript sous IE7 ?

Toutes les idées sont les bienvenues !

Encore merci et bon dimanche.

Mafate
Mafate est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2008, 20h46   #4
IP-Fix
Membre éprouvé
 
Avatar de IP-Fix
 
Inscription : mars 2006
Messages : 421
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 421
Points : 453
Points : 453
Envoyer un message via MSN à IP-Fix
Ton code d'insertion me parait louche avec deux if IE qui ne specifie pas la version , t'insert deux fois le flash ? ^^

tu peux tester si avec un framework comme mootools1.2 ( qui integre un integrateur de swf) si sa marche , sinon cherche sur le net pour intégré un flash sous ie7 tu devrais trouver vite
__________________
Mon nouveau blog : Flash-Dungeon : AS3 / Objectif-C
IP-Fix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2008, 00h12   #5
Mafate
Invité régulier
 
Inscription : janvier 2005
Messages : 43
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Deux Sèvres (Poitou Charente)

Informations forums :
Inscription : janvier 2005
Messages : 43
Points : 9
Points : 9
Bonsoir IP-Fix, bonsoir à tous.

Je ne connais pas du tout mootools1.2. Par contre, j'ai essayé plusieurs méthodes pour insérer mon Flash :

1 - Méthode Satay simple :

Code :
1
2
3
4
5
6
7
8
9
10
<!-- Carte swf - Méthode Satay -->
<div id="carte">
	<fieldset>
		<legend>Région</legend>
		<object type="application/x-shockwave-flash" data="./flash/zzzzGet.swf" width="350" height="293.8"> 
			<param name="movie" value="./flash/zzzzGet.swf" /> 
			<param name="wmode" value="transparent" /> 
		</object>
	</fieldset>
</div>
Résultat : ne fonctionne que sous Firefox, pas sous IE6 ni sous IE7.

2 - Méthode Satay double, celle déjà vue avec les [if IE] et [endif] :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!--[if IE]>
	<object type="application/x-shockwave-flash" data="./flash/zzzzPost.swf" width="350" height="293.8" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="ma_carte">
		<param name="movie" value="./flash/zzzzPost.swf" />
		<param name="wmode" value="transparent" />
		<param name="quality" value="high">
		<p><a href="http://get.adobe.com/fr/flashplayer/">Télécharger gratuitement Adobe Flash Player</a></p>
	</object>
<![endif]-->
 
<!--[if !IE]> <-->
	<object class="objet" type="application/x-shockwave-flash" data="./flash/zzzzPost.swf" width="350" height="293.8">
		<param name="movie" value="./flash/zzzzPost.swf" />
		<param name="wmode" value="transparent" /> 
		<param name="quality" value="high">
		<p><a href="http://get.adobe.com/fr/flashplayer/">Télécharger gratuitement Adobe Flash Player</a></p>
	</object>
<!--> <![endif]-->
Résultat : fonctionne avec Firefox et IE6, pas IE7.

3 - Méthode avec SWFObject :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- Carte swf - Méthode SWFObject -->
<div id="carte">
	<fieldset>
		<legend>Région</legend>
		<div id="carte_fr_01">
			<a href="http://www.macromedia.com/go/getflashplayer">Téléchargez gratuitement Macromedia Flash Player pour accéder à la carte.</a>
		</div>
	</fieldset>
</div>
<script type="text/javascript" defer="defer">
	<!-- var so = new SWFObject("./flash/carte_fr_01.swf", "macarte", 350, 293.8, 7, "#336699"); -->
	var so = new SWFObject("./flash/zzzzGet.swf", "ma_carte", 350, 293.8, 7, "#336699"); 
	so.addParam("wmode", "transparent");
	so.addParam("scale", "showall");
	so.write("carte_fr_01");
</script>
Résultat : ne fonctionne que sous Firefox, pas sous IE6 ni sous IE7.

4 - Méthode Twice-Cooked :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- Carte swf - Méthode Twice-Cooked -->
<!-- cf. http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002203.html -->
<div id="carte">
	<fieldset>
		<legend>Région</legend>
		<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" 
				codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" 
				width="350" height="293.8" id="ma_carte" align="middle">
			<param name="allowScriptAccess" value="sameDomain" />
			<param name="movie" value="./flash/zzzzGet.swf" />
			<param name="quality" value="high" />
			<param name="wmode" value="transparent" /> 
			<embed src="./flash/zzzzGet.swf" quality="high" wmode="transparent" width="350" height="293.8" 
				   name="ma_carte" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" 
				   pluginspage="http://www.macromedia.com/go/getflashplayer" />
		</object> 						
	</fieldset>
</div>
Résultat : ne fonctionne que sous Firefox, pas sous IE6 ni sous IE7.

Je vais finir par perdre le peu de cheveux qu'il me reste. Merci d'avance si tu as une idée pour résoudre ce problème de communication entre JavaScrip et ActionScript...

Bonne fin de soirée,

Mafate
Mafate est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2008, 09h43   #6
IP-Fix
Membre éprouvé
 
Avatar de IP-Fix
 
Inscription : mars 2006
Messages : 421
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 421
Points : 453
Points : 453
Envoyer un message via MSN à IP-Fix
La solution avec swfobject2 :

http://blog.circlecube.com/wp-conten...nication2.html donc sa marche sous ie7

http://blog.circlecube.com/2008/02/0...communication/

Regarde son code source !

__________________
Mon nouveau blog : Flash-Dungeon : AS3 / Objectif-C
IP-Fix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2008, 13h20   #7
Mafate
Invité régulier
 
Inscription : janvier 2005
Messages : 43
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Deux Sèvres (Poitou Charente)

Informations forums :
Inscription : janvier 2005
Messages : 43
Points : 9
Points : 9
OUIIIIIIIIIIII !!!!!!!!!!

Merci IP-Fix, je n'avais essayé que la version 1.5 de SWFObject. Avec la 2, c'est nickel !

Encore mille MERCI !!!
Mafate est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h04.


 
 
 
 
Partenaires

Hébergement Web