Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Candidat au titre de Membre du Club
    Profil pro
    Inscrit en
    janvier 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : janvier 2005
    Messages : 52
    Points : 10
    Points
    10

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

  2. #2
    Membre éprouvé Avatar de IP-Fix
    Profil pro
    Inscrit en
    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

    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 :
    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
    Candidat au titre de Membre du Club
    Profil pro
    Inscrit en
    janvier 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : janvier 2005
    Messages : 52
    Points : 10
    Points
    10

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

  4. #4
    Membre éprouvé Avatar de IP-Fix
    Profil pro
    Inscrit en
    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

    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
    Candidat au titre de Membre du Club
    Profil pro
    Inscrit en
    janvier 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : janvier 2005
    Messages : 52
    Points : 10
    Points
    10

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

  6. #6
    Membre éprouvé Avatar de IP-Fix
    Profil pro
    Inscrit en
    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

    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
    Candidat au titre de Membre du Club
    Profil pro
    Inscrit en
    janvier 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : janvier 2005
    Messages : 52
    Points : 10
    Points
    10

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •