[AS3] Error #1009: Il est impossible d'accéder à la propriété ou à...

Error #1009: Il est impossible d'accéder à la propriété ou à... [AS3] - Flash/ActionScript - Programmation

Marsh Posté le 01-11-2008 à 00:08:39    

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 ! :D 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. <!--[if IE]>
  2. <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">
  3.  <param name="movie" value="./flash/zzzzPost.swf" />
  4.  <param name="wmode" value="transparent" />
  5.  <param name="quality" value="high">
  6.  <p><a href="http://get.adobe.com/fr/flashplayer/">Télécharger gratuitement Adobe Flash Player</a></p>
  7. </object>
  8. <![endif]-->
  9. <!--[if !IE]> <-->
  10. <object class="objet" type="application/x-shockwave-flash" data="./flash/zzzzPost.swf" width="350" height="293.8">
  11.  <param name="movie" value="./flash/zzzzPost.swf" />
  12.  <param name="wmode" value="transparent" />
  13.  <param name="quality" value="high">
  14.  <p><a href="http://get.adobe.com/fr/flashplayer/">Télécharger gratuitement Adobe Flash Player</a></p>
  15. </object>
  16. <!--> <![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. import flash.net.URLRequest; 
  2. import flash.net.URLVariables; 
  3. import flash.net.URLRequestMethod;
  4. import flash.external.ExternalInterface;
  5. // Evenements déclenchés lorsqu'un clic sur l'objet est relaché.
  6. function sourisUp(evt:MouseEvent)
  7. {
  8. // Récupération du tableau retourné par la fonction JavaScript valeurElements().
  9. var valeurElements:Array;
  10. valeurElements = ExternalInterface.call("valeurElements" );
  11. // Page PHP cible.   
  12. var adresse:URLRequest = new URLRequest("./mapage.php" ); 
  13. // Variables à envoyer.
  14. var variables:URLVariables = new URLVariables(); 
  15. variables.type_entite = typeEntite; 
  16. variables.code_entite = codeEntite; 
  17. variables.type_evenement = valeurElements[0];
  18. variables.date_evenement = valeurElements[1];
  19. // On passe les variables à l'adresse.
  20. adresse.data = variables; 
  21.  
  22. // Méthode d'envoi.  
  23. adresse.method = URLRequestMethod.POST;
  24. // Envoi de l'URL.
  25. navigateToURL(adresse, "_self" );
  26. }


 
En espérant que cela inspire quelqu'un, je ne vois pas ce qui peut avoir une valeur null là-dedans...
 
Merci d'avance !  ;)

Reply

Marsh Posté le 01-11-2008 à 00:08:39   

Reply

Marsh Posté le 04-11-2008 à 00:16:07    

Bonsoir à tous.
 
Je viens de faire plusieurs essais de mon côté pour essayer de trouver pourquoi j'ai ce problème de communication entre JavaScript et ActionScript :
 
1 - Tout d'abord, j'ai supprimé de ma page recherche.php tout le code JavaScript qui n'était pas nécessaire au passage des données du formulaire au Flash. J'ai supprimé notamment tout ce qui touche aux calendriers JQuery. Il n'y est resté en fait que la balise SCRIPT suivante dans le HEAD de ma page, le fichier fonctions.js contenant la fonction valeurElements() utilisée dans mon code ActionScript :
 

Code :
  1. <script type="text/javascript" src="./javascript/fonctions.js"></script>


 
Résultat : erreur #1009 à nouveau, triangle jaune en bas à gauche du navigateur, etc...
 
 
2 - Une précision : j'ai placé dans ma page recherche.php un bouton appelant la fonction valeurElements() comme suit :
 

Code :
  1. <div id="boutonRecherche">
  2. <input type="button" value="Rechercher" onclick="alert(valeurElements()[0]);" />
  3. </div>


 
Résultat : tout se passe bien ! La fonction retourne le résultat escompté, même sous IE7. Un clic à suivre sur la carte en Flash utilisant la même fonction JacaScript dans la même page PHP plante toujours, évidemment...
 
 
3 - Autre test : j'ai créé une nouvelle fonction JavaScript simplifiée retournant un entier à la place d'un tableau :
 

Code :
  1. function valeurElements2()
  2. {
  3. alert('Hello !');
  4. return 999;
  5. }


 
 
J'ai modifié le code ActionScript en conséquence pour utiliser cette fonction JavaScript à la place de la fonction initiale :
 

Code :
  1. // Evenements déclenchés lorsque la souris quitte l'objet.
  2. function sourisOut(evt:MouseEvent)
  3. {
  4. // Effacement du texte quand le bouton n'est plus survolé.
  5. label.htmlText = "";
  6. }
  7. // Evenements déclenchés lorsqu'un clic sur l'objet est relaché.
  8. function sourisUp(evt:MouseEvent)
  9. {
  10. // Récupération du tableau retourné par la fonction JavaScript valeurElements().
  11. var valeurElements:String;
  12. valeurElements = ExternalInterface.call("valeurElements2" );
  13. // Page PHP cible.   
  14. var adresse:URLRequest = new URLRequest("./mapage.php" ); 
  15. // Variables à envoyer.
  16. var variables:URLVariables = new URLVariables(); 
  17. variables.type_entite = typeEntite; 
  18. variables.code_entite = codeEntite; 
  19. variables.type_evenement = valeurElements;
  20. variables.date_evenement = valeurElements;
  21. // On passe les variables à l'adresse.
  22. adresse.data = variables; 
  23.  
  24. // Méthode d'envoi.  
  25. adresse.method = URLRequestMethod.POST;
  26. // Envoi de l'URL.
  27. navigateToURL(adresse, "_self" );
  28. }


 
Résultat : l'appel de la fonction avec le bouton retourne bien 999 comme attendu. Un clic sur la carte Flash appelant la fonction valeurElements2() ne génère plus d'erreur #1009 ni de triangle jaune et la page mapage.php est bien affichée ! Malheureusement, les variables $_POST['type_evenement'] et $_POST['date_evenement'] qui lui sont transmises contiennent null au lieu de 999...
 
Je vais me suicider à coup de pelle à tarte si ça continue !!! [:al zheimer]
 
Cela vous inspire-t-il quelque-chose ?
 
Merci et bonne fin de soirée.  ;)  
 
Mafate

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed