IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une. . .


Sujet :

ActionScript 3

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 66
    Points : 56
    Points
    56
    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 :

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Membre confirmé Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Points : 494
    Points
    494
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 66
    Points : 56
    Points
    56
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function valeurElements2()
    {
    	alert('Hello !');
    	return 999;
    }
    Le code dans mon Flash étant alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre confirmé Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Points : 494
    Points
    494
    Par défaut
    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

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 66
    Points : 56
    Points
    56
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre confirmé Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Points : 494
    Points
    494
    Par défaut
    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 !


  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 66
    Points : 56
    Points
    56
    Par défaut
    OUIIIIIIIIIIII !!!!!!!!!!

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

    Encore mille MERCI !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/03/2011, 01h54
  2. Error #1009: Il est impossible d'accéder.
    Par zack990 dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 25/02/2011, 09h02
  3. Réponses: 5
    Dernier message: 11/06/2009, 17h46
  4. Réponses: 4
    Dernier message: 23/04/2009, 13h45
  5. Réponses: 3
    Dernier message: 02/06/2008, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo