[AS3] Naviguer de swf en swf ?

Naviguer de swf en swf ? [AS3] - Flash/ActionScript - Programmation

Marsh Posté le 01-02-2010 à 11:11:04    

Bonjour,
Débuts difficile en AS3... pourtant rien de compliqué, je souhaite pouvoir naviguer d'une page d'accueil vers 4 pages secondaires (et pouvoir revenir à l'accueil  :o ), le tout avec un swf par page.
Je sèche avec mes 5 swf depuis 48h, si une âme charitable veut bien m'expliquer la chose, avec un bout de code :sweat:
:jap:
 
Edit :
J'ai mes 4 boutons, fais chacun, d'une occurence de clip avec une image clef pour le code. idem dans les pages secondaires pour le bouton "Accueil"... Manque que le code, c'est balo  :D


Message édité par rfv le 01-02-2010 à 11:19:15
Reply

Marsh Posté le 01-02-2010 à 11:11:04   

Reply

Marsh Posté le 01-02-2010 à 21:17:59    

Bah, le code ça reste l'élément principale de l'interactivité flash...
 
Sinon, pourquoi faire plusieur SWF plutot que tout intégré dans le même flash ?
Si tu peux vraiment pas changer cette plaie, passe par un loader...
Un clique sur tes bouton communique l'url du swf à loader (et détruire certains élément de ll'anciens SWF loadé si nécessaire...
 
Par rexemple :

Code :
  1. var monConteneur:Loader = new Loader();
  2. monConteneur.x = 0 ; // position en x
  3. monConteneur.y = 0 ; // position en y
  4.  
  5. //Si mes bouton se nomment "monBouton1", "monBouton2" ....
  6. monBouton1.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  7. monBouton2.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  8. monBouton3.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  9. monBouton4.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  10. monBouton5.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  11.  
  12. //et je declare ma fonction !
  13. function clickListener(e:MouseEvent){
  14.     switch(e.target.name){
  15.         case "monBouton1" :
  16.             monConteneur.load(new URLRequest("monSwf1.swf" ));
  17.             break;
  18.         case "monBouton2" :
  19.             monConteneur.load(new URLRequest("monSwf2.swf" ));
  20.             break;
  21.         case "monBouton3" :
  22.             monConteneur.load(new URLRequest("monSwf3.swf" ));
  23.             break;
  24.         case "monBouton4" :
  25.             monConteneur.load(new URLRequest("monSwf4.swf" ));
  26.             break;
  27.         case "monBouton5" :
  28.             monConteneur.load(new URLRequest("monSwf5.swf" ));
  29.             break;
  30.     }
  31. }


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Marsh Posté le 02-02-2010 à 12:01:07    

:jap:  
C'est vraiment mes tout premiers pas en ActionScript, en fait je suis encore à genoux.
 
Merci c'est impec, j'ai juste ajouté un addChild en haut et ça marche (bah rien que ça c'est pas venu tout de suite :o).
Me reste plus qu'à trouver comment vider le conteneur avant de charger la nouvelle anim, ça tourne en dessous.
 
A moins que je suive ton conseil et que je colle tout dans le même swf, c'était pour faire plus light mais apparement c'est une mauvaise idée.


Message édité par rfv le 02-02-2010 à 12:01:21
Reply

Marsh Posté le 02-02-2010 à 16:31:27    

a oui, le addChild() lol !!!
Pour le reste, il faut donc qu'on charge le contenu dans un clip et qu'on en supprime le contenu avant de charger quelquechose par dessus...
Il faut que tu rajoute un listener quand le chargement est complet, pour décrire la marche à suivre :

 
Code :
  1. var monChargeur:Loader = new Loader();
  2. monChargeur.contentLoaderInfo.addEventListener(Event.COMPLETE, chargementComplet);
  3.  
  4. monConteneur:MovieClip = new MovieClip() // Le futur conteneur des SWF...
  5. monConteneur.x = 0 ; // position en x
  6. monConteneur.y = 0 ; // position en y
  7. this.addChild(monConteneur);
  8.  
  9. //Si mes bouton se nomment "monBouton1", "monBouton2" ....
  10. monBouton1.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  11. monBouton2.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  12. monBouton3.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  13. monBouton4.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  14. monBouton5.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  15.  
  16. //et je declare ma fonction !
  17. function clickListener(e:MouseEvent){
  18.     switch(e.target.name){
  19.         case "monBouton1" :
  20.             monConteneur.load(new URLRequest("monSwf1.swf" ));
  21.             break;
  22.         case "monBouton2" :
  23.             monConteneur.load(new URLRequest("monSwf2.swf" ));
  24.             break;
  25.         case "monBouton3" :
  26.             monConteneur.load(new URLRequest("monSwf3.swf" ));
  27.             break;
  28.         case "monBouton4" :
  29.             monConteneur.load(new URLRequest("monSwf4.swf" ));
  30.             break;
  31.         case "monBouton5" :
  32.             monConteneur.load(new URLRequest("monSwf5.swf" ));
  33.             break;
  34.     }
  35. }
  36.  
  37. function chargementComplet(e:Event){
  38.     // occupons nous de dire à flash : "tant qu'il y aura des enfants (clip) dans monConteneur, tu supprimes le 1er...
  39.     // C'est un peu bourrin, mais j'ai pas envie de reflechir plus !
  40.     while (monConteneur.numChildren>0){monConteneur.removeChildAt(0)};
  41.     // Et maintenant qu'il y a plus rien dans monConteneur, on rajoute un enfant : le contenu chargé !
  42.     monConteneur.addChild(e.currentTarget.content);
  43. }
 

Encore un truc que j'ai pas testé, j'ai peut-etre oublié un truc donc...
Ce n'est surement pas la meilleur methode, le principal est de la comprendre...

Message cité 1 fois
Message édité par abais le 02-02-2010 à 16:34:18

---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Marsh Posté le 14-02-2010 à 20:13:23    

:) :jap:  Merci, ça progresse, comme j'ai galéré pour trois merdouilles de rien du tout dans le code  :o
Soucis : c'est débuggé mais ça ne décharge toujours pas l'anim active, ça continu à s'empiler et s'alourdir comme avec le 1er code.  :(  
 
J'ai ça dans chaque rubrique (swf "enfants" de accueil.swf) :
 
var monChargeur:Loader = new Loader();
monChargeur.contentLoaderInfo.addEventListener(Event.COMPLETE, chargementComplet);  
 
var monConteneur:MovieClip = new MovieClip();
monConteneur.x = 0 ;
monConteneur.y = 0 ;
this.addChild(monConteneur);  
 
accueil.addEventListener(MouseEvent.MOUSE_UP, clickListener);
 
function clickListener(e:MouseEvent)
{
 switch(e.target.name)
 {
  case "accueil" :  
  monChargeur.load(new URLRequest("accueil.swf" ));  
  break;
 }
}
 function chargementComplet(e:Event)
 {  
  while (monConteneur.numChildren>0)
  {
   monConteneur.removeChildAt(0);
  }  
 monConteneur.addChild(e.currentTarget.content);
 }

 

abais a écrit :


Encore un truc que j'ai pas testé, j'ai peut-etre oublié un truc donc...
Ce n'est surement pas la meilleur methode, le principal est de la comprendre...


[:pradar:4]
Bah justement, je dois avoir le cerveau spongieux, quelque chose m'échappe dans ton tour de passe passe entre monChargeur et monConteneur, overdose inside, pendaison imminente, je suis même plus à genoux, je rampe.
 
 :sweat: Une idée ? Une bonne âme pour tester/débugger la chose ?

Message cité 1 fois
Message édité par rfv le 15-02-2010 à 02:11:08
Reply

Marsh Posté le 15-02-2010 à 08:32:17    

rfv a écrit :

J'ai ça dans chaque rubrique (swf "enfants" de accueil.swf)


Non non ! c'est dans le conteneur principale (ton "accueil" ) que ce code doit être mis !
Son principe est de créer un clip unique qui se charge de contenir ce qui est chargé par mon loader, tout en le vidant...

rfv a écrit :

Bah justement, je dois avoir le cerveau spongieux, quelque chose m'échappe dans ton tour de passe passe entre monChargeur et monConteneur, overdose inside, pendaison imminente, je suis même plus à genoux, je rampe.


 
C'est tout à fait normal vu que je n'avais pas toute ma tête, je t'ai mis n'importe quoi...  :pt1cable:  :whistle:  
J'ai en effet mis des load() sur le MovieClip  :pfff:  (que je n'avais même pas déclaré d'ailleurs)
Mais ça, tu l'as corrigé tout seul !
 
Donc, pour reprendre le principe :
 
Le Loader se contente de charger...
Le MovieClip se contente de contenir...
 
Donc, une fois que Loader a fini de charger un contenu, on déplace ce contenu dans le MovieClip
(ça nous permet de le contrôler plus facilement)
Puis une fois déplacer, on décharge le loader... (La ligne que j'ai rajouté).
Bien distinguer le chargement d'un objet de son instanciation (sa mise en place dans ton stage)...
 
Le code correcte pour ton accueil (qui marche chez moi) :

Code :
  1. var monChargeur:Loader = new Loader();
  2. monChargeur.contentLoaderInfo.addEventListener(Event.COMPLETE, chargementComplet);
  3.  
  4. var monConteneur:MovieClip = new MovieClip() // Le futur conteneur des SWF...
  5. monConteneur.x = 0 ; // position en x
  6. monConteneur.y = 0 ; // position en y
  7.  
  8. addChild(monConteneur);
  9.  
  10. //Si mes bouton se nomment "monBouton1", "monBouton2" ....
  11. monBouton1.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  12. monBouton2.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  13. monBouton3.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  14. monBouton4.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  15. monBouton5.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  16.  
  17. //et je declare ma fonction !
  18. function clickListener(e:MouseEvent){
  19.     switch(e.target.name){
  20.         case "monBouton1" :
  21.             monChargeur.load(new URLRequest("monSwf1.swf" ));
  22.             break;
  23.         case "monBouton2" :
  24.             monChargeur.load(new URLRequest("monSwf2.swf" ));
  25.             break;
  26.         case "monBouton3" :
  27.             monChargeur.load(new URLRequest("monSwf3.swf" ));
  28.             break;
  29.         case "monBouton4" :
  30.             monChargeur.load(new URLRequest("monSwf4.swf" ));
  31.             break;
  32.         case "monBouton5" :
  33.             monChargeur.load(new URLRequest("monSwf5.swf" ));
  34.             break;
  35.     }
  36. }
  37.  
  38. function chargementComplet(e:Event){
  39.     // occupons nous de dire à flash : "tant qu'il y aura des enfants (clip) dans monConteneur, tu supprimes le 1er...
  40.     // C'est un peu bourrin, mais j'ai pas envie de reflechir plus !
  41.     while (monConteneur.numChildren>0){monConteneur.removeChildAt(0)};
  42.     // Et maintenant qu'il y a plus rien dans monConteneur, on rajoute un enfant : le contenu chargé !
  43.     monConteneur.addChild(e.currentTarget.content);
  44.     monChargeur.unload();
  45. }


 
Encore une fois, loader des sous-rubriques, c'est super crade, ça fout la merde surtout si tu communique entre les 2...
Normalement, on met tout dans le même .fla (si tu utilise flash), et on se démerde pour centraliser le code (ça, ça vient avec l'expérience)..
 
Bon courage !


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Marsh Posté le 15-02-2010 à 12:11:04    

Merci :)
Je n'ai pas été limpide dans mon explication, je souhaite simplement avoir un comportement similaire au html quand tu link en ciblant _self.
 
Le menu rubriques n'étant pas présent dans les rubriques mais juste sur l'accueil, il faut bien être en mesure de revenir vers l'accueil depuis chaque page de rubrique.
Je me contenterais d'un truc cracra où l'accueil reste "dessous" et où les rubriques sont déchargées lors du clique sur le bouton accueil, faisant ainsi réapparaitre ce dernier, resté en embuscade.
 
J'ai fais un exemple simplifié de la structure de ma bouse, tu comprendra tout de suite mon problème (j'ai viré les fonds blancs histoire bien voir le pb) :
http://zepitou.free.fr/exemple.zip
 
Depuis, j'ai viré le code des rubriques et je suis en train de me battre avec ça :
public function unloadAndStop(gc:Boolean = true):void
 
ça me semble être pile poil ce qu'il me faut, mais...
 
[:blessure]


Message édité par rfv le 15-02-2010 à 12:54:54
Reply

Marsh Posté le 15-02-2010 à 13:15:57    

public function unloadAndStop(gc:Boolean = true):void

 

Cette ligne signifie que tu déclare une fonction que tu nomme unloadAndStop...
Tu lui dis qu'elle necessitera d'une variable booléenne, qui si elle n'est pas mentionnée à l'appel de la fonction, prendra "True" pour valeur par défaut.
:Void signifie qu'elle ne return pas de valeur.
Le "public" signifie quelle est accessible par toute les classes parente, ce qui te seras totalement étrangé/incompréhensible si tu ne fait pas de POO...

 

Bref, il ne s'agit en aucun cas d'une fonction pré-faite de flash :) t'as copié-collé ça d'un autre site/forum

 

Sinon, ta solution serait surement de repartir ton accueil rubrique dans des frames clé, tout simplement
tu mets un stop() sur chacune, puis tes bouton dirige vers la bonne frame...

Message cité 1 fois
Message édité par abais le 15-02-2010 à 13:18:44

---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Marsh Posté le 15-02-2010 à 13:20:02    

Bonjour,
 
Je cherche de l'aide pour une animation flash, c'est à dire que je fais une intro de site, et j'aimerais réaliser un bouton d'ou sortirais une farandole d'images.... Quelqu'un serait m'aider je suis vraiment très perdu et je ne vois pas comment faire !!!!!  
 
Merci d'avance  
 

Reply

Marsh Posté le 15-02-2010 à 14:37:57    

abais a écrit :

public function unloadAndStop(gc:Boolean = true):void
 
Cette ligne signifie que tu déclare une fonction que tu nomme unloadAndStop...
Tu lui dis qu'elle necessitera d'une variable booléenne, qui si elle n'est pas mentionnée à l'appel de la fonction, prendra "True" pour valeur par défaut.
:Void signifie qu'elle ne return pas de valeur.
Le "public" signifie quelle est accessible par toute les classes parente, ce qui te seras totalement étrangé/incompréhensible si tu ne fait pas de POO...
 
Bref, il ne s'agit en aucun cas d'une fonction pré-faite de flash :) t'as copié-collé ça d'un autre site/forum
 
Sinon, ta solution serait surement de repartir ton accueil rubrique dans des frames clé, tout simplement
tu mets un stop() sur chacune, puis tes bouton dirige vers la bonne frame...


 
Non non, c'est une nouvelle méthode de la classe Loader, pas une fonction, le (gc:Boolean = true) ne sert à rien vu que par défaut, le ramasse miettes passe.
Je te cache pas que j'essaie de trouver mon bonheur là où je peux, j'ai acheté le bouquin de Thibault Imbert mais j'ai vite réalisé que l'AS3 nécessite des bases que je n'ai pas, du coup j'en chie comme un Russe pour faire un truc de rien du tout.
Extrait du bouquin :
Désactiver une animation chargée
Très souvent, un site Flash est constitué d’une application principale chargeant différents modules, séparés en plusieurs SWF. Chacun d’entre eux est ensuite chargé afin de naviguer dans le site.

....etc, mais surtout la fin du paragraphe (différente de la version online du livre) :
Il existe aujourd'hui une solution efficace grâce à la méthode unloadAndStop, apparue sur la classe Loader au sein du lecteur Flash 10. Celle-ci permet de décharger une animation en stoppant toute exécution du code présent dans un SWF chargé. Lors de son utilisation les tâches suivantes sont effectuées :
...etc, je resume : ça vire tout et ça force le passage du ramasse miette par defaut.
puis il écrit :
Cette méthode possède la signature suivante :
public function unloadAndStop(gc:Boolean = true):void

 
Voila, donc c'est bien ce qu'il me faut, mais il ne t'aura pas échappé que je suis une burette en prog, et qu'avec ce bout de code j'éprouve sensiblement la même chose qu'une poule face à rubicube.
 
Mais j'y arriverai, par contre après, y'aura un bouquin à vendre :o
 
Edit 1 :
ça se précise http://kb2.adobe.com/cps/403/kb403670.html  
 
Edit2 :
Bon ben en fait ça revient au même, j'ai l'impression que j'essai de faire un truc impossible en fait, il faut que j'inclus le bouton "Accueil" dans la page accueil et non dans les rubriques, qui sont incapables de s'auto-décharger.


Message édité par rfv le 16-02-2010 à 10:48:06
Reply

Marsh Posté le 15-02-2010 à 14:37:57   

Reply

Marsh Posté le 15-02-2010 à 19:31:02    

Mais ton problème est surement ailleurs, je vais DL ton truc pour jeter un oeil...
 
AS3 vaut le coup, graphiste de base, j'étais une grosse merde en prog encore il y a pas si longtemps mais c'est l'AS3 qui m'a tout apporté, je suis loin d'être un killer, n'empêche que j'avance à grand pas...
Il te manque en effet quelque concept encore...


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Marsh Posté le 16-02-2010 à 17:17:03    

C'est violent le début en tous cas.
merci pour ton aide, ne t'embête pas avec ça, sauf si ça t'intéresse à titre perso. Pour l'instant je vais me contenter d'adapter l'ergonomie à ce que je sais faire :)
M'enfin bon, si tu trouves en 5mn comment un swf peu s'auto-décharger à l'intérieur d'un autre swf, je pense que je ne serais pas le seul intéressé.
 
A+ :)

Reply

Marsh Posté le 16-02-2010 à 19:31:48    

rfv a écrit :

C'est violent le début en tous cas.
merci pour ton aide, ne t'embête pas avec ça, sauf si ça t'intéresse à titre perso. Pour l'instant je vais me contenter d'adapter l'ergonomie à ce que je sais faire :)
M'enfin bon, si tu trouves en 5mn comment un swf peu s'auto-décharger à l'intérieur d'un autre swf, je pense que je ne serais pas le seul intéressé.
 
A+ :)

Pour ce que tu veux, ça me parait être une mauvaise direction, mais voila la demarche :
 
Dans ton accueil :

Code :
  1. var monChargeur:Loader = new Loader();
  2. monChargeur.contentLoaderInfo.addEventListener(Event.COMPLETE, chargementComplet);
  3.  
  4. boutonRubrique1.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  5. boutonRubrique2.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  6.  
  7. function clickListener(e:MouseEvent)
  8. {
  9.     //d'abord, je suppr tout ce qu'il y a ici, même les listener (question de propreté)
  10.     while (this.numChildren>0){this.removeChildAt(0)};
  11.     boutonRubrique1.removeEventListener(MouseEvent.MOUSE_UP, clickListener);
  12.     boutonRubrique2.removeEventListener(MouseEvent.MOUSE_UP, clickListener);
  13.     
  14.     //Puis je load ma rubrique
  15.     switch(e.target.name)
  16.     {    
  17.         case "boutonRubrique1" :
  18.             monChargeur.load(new URLRequest("rubrique1.swf" ));
  19.             break;
  20.         case "boutonRubrique2" :
  21.             monChargeur.load(new URLRequest("rubrique2.swf" ));
  22.             break;
  23.     }
  24. }
  25.  
  26. function chargementComplet(e:Event)
  27. {
  28.     monChargeur.contentLoaderInfo.removeEventListener(Event.COMPLETE, chargementComplet);
  29.     addChild(monChargeur);
  30. }

Puis dans ta rubrique 1 (par exemple) :

Code :
  1. var monChargeur:Loader = new Loader();
  2. boutonAccueil.addEventListener(MouseEvent.MOUSE_UP, clickListener);
  3.  
  4. function clickListener(e:MouseEvent)
  5. {
  6.     while (this.numChildren>0){this.removeChildAt(0)};
  7.     boutonAccueil.removeEventListener(MouseEvent.MOUSE_UP, clickListener);
  8.     monChargeur.load(new URLRequest("accueil.swf" ));
  9.     this.addChild(monChargeur);
  10. }


 
Tiens, ça c'est une piste a explorer :
http://urfman.free.fr/fhw/test.rar


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Marsh Posté le 16-02-2010 à 21:04:56    

Impec, merci encore, y'a deux trois choses qui commencent à se clarifier mais ça reste de la brasse coulée, je vais essayer de m'accrocher, ça a l'air de valoir le coût.


Message édité par rfv le 16-02-2010 à 21:05:12
Reply

Marsh Posté le 16-02-2010 à 22:20:12    

Il faut vraiment que tu distingues la création d'un élement à partir d'une class (loader, moavieclip, ....), de son instanciation(le addChild(), le fait de le rajouté dans la scène).
Tu remarqueras que j'ai abandonné l'idée du conteneur MovieClip, vu qu'on supprime tout entre chaque rubrique...
Tant qu'on y est, dis moi ce qui t'embete


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Marsh Posté le 17-02-2010 à 01:50:05    

Bah je vais prendre un peu de recul pour répondre à ta question, parce que sinon tu vas m'avoir sur les bras pendant les 2 prochaines années.
Donc, ce qui m'embête c'est de ne pas connaitre :
 
1- THE site idéal pour dégrossir les grands principes, avec des exemples.
 
2- THE source d'informations concrètes sur l'AS3, avec des exemples. Il existe des tas de tutos à droite à gauche, mais il doit bien y avoir un site vraiment complet et bien foutu sur le sujet ? Ou un bouquin genre "livre du zéro" ou "pour les nuls" mais vraiment bien foutu juste pour commencer, pas un 2ème pavé quoi :D.
 
Aprés je te fout la paix :o


Message édité par rfv le 17-02-2010 à 01:55:31
Reply

Marsh Posté le 17-02-2010 à 07:54:07    

Alors en effet, le bouquin que tu as de Thibault Imbert n'est pas top pour apprendre vu qu'il s'utilise plus comme un dictionnaire, à savoir si tu t'intéresse à une fonction en particulier...
C'est vrai qu'il manque des sites sur les bases de l'AS3, ne serait-ce pour "apprendre à lire la documentation" qui parait très désorganisé au début...
C'est en pratiquant les tutoriel des frameworks comme Away3D que j'ai compris les bases perso, mais j'ai aussi un bouquin sympa qui s'appel "ActionScript 3.0 pour les jeux" qui m'a éclaircie pas mal de choses...
 
Sinon :
http://www.flashkod.com/tutoriaux/ [...] E_906.aspx
http://www.bases-as3.fr/
flashKod.com (pleins de codes sources)
...
 


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Marsh Posté le 17-02-2010 à 12:19:07    

:jap:
Mouche grasse.
A+
 
Edit : Yes, j'ai fini mon bazard, ça marche impec. Du coup ça m'a bien motivé à continuer, merci encore pour ton aide.

Reply

Marsh Posté le 17-02-2010 à 13:07:17    

rfv a écrit :

merci encore pour ton aide.


De rien, tu parlera de moi à tes enfants  :jap:  
Le principale c'est que tu comprenne et que tu t'y intéresse !


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Sujets relatifs:

Leave a Replay

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