Création d'un lien vers un site web sur un bouton
La création d'un lien web dans Flash va se faire grâce à la fonction navigateToURL. L'adresse web ciblée sera stockée dans un objet URLRequest.
Le lien web sera généralement associé à un bouton mais il peut être défini sur tout objet implémentant l'évènement CLICK.
Nous utiliserons l'évènement CLICK, expliqué dans ce billet.
Le site lié sera un annuaire de clubs de foot.
-
//fonction exécutée en réponse à l'événement
-
function onClic(pEvt:Event):void
-
{
-
var annuaire:URLRequest = new URLRequest( "http://www.annuaire-football.org" );
-
navigateToURL ( annuaire );
-
}
-
leBouton_btn.addEventListener(MouseEvent.CLICK, onClic);
Nous pourrions aussi simplifier l'écriture en utilisant :
-
//fonction exécutée en réponse à l'événement
-
function onClic(pEvt:Event):void {
-
navigateToURL ( new URLRequest( "http://www.annuaire-football.org" ) );
-
}
-
leBouton_btn.addEventListener(MouseEvent.CLICK, onClic);
;)
Je suis Antony Chauviré, développeur sur la Flash Platform.
Salut, je debute en Flash et un peu moins en AS3, j'ai fait un petit de Flex.
J'essaie desesperement de faire un lien sur un bouton mais je ne trouve pas la solution.
Ou est-ce que tu mets le code que tu nous a donne en exemple dans Flash ?
Dans Actions, le code est vide et ne peut pas etre rempli.
Merci.
bonjour,
désolé pour la réponse tardive mais la voila.
tu créé un second calque, que tu nommes as. Tu te places sur la première image du calque et là tu fais F9. Le panneau actions apparaît et tu peux saisir le code.
;)
SALUT
L'exemple fonctionne pour 1 bouton et 1 lien, mais pour plusieurs boutons, ça devient brouillon, non? Du coup, j'ai essayé de développer ceci:
----------------------------------------------------------------------------------
var bouton1URL:String = "fr.bouton1.com/";
function bouton1Listener(event:Event):void {
var url:URLRequest = new URLRequest(event.target.name+"URL");
navigateToURL(url,"_blank");
}
bouton1.addEventListener(MouseEvent.CLICK,bouton1Listener);
// je crée sur ma scène un BOUTON nommé "bouton1".
// je veux que lors du clic sur bouton1, une nouvelle fenêtre s'affiche avec le lien correspondant.
// Le fait est que je vais avoir bouton2, ..., boutonN, et qu'à chacun correspond un lien différent.
// Je souhaite avoir une fonction qui ajoute "URL" au nom du bouton clické pour tomber sur la variable
// chaîne boutonNURL contenant le bon lien.
// Bon, la commande event.target.name+"URL" me renvoie bien ici "bouton1URL", mais l'interpréteur ne
// fait pas le rapport avec ma variable bouton1URL
// ???????????
----------------------------------------------------------------------------------
HELP PLEASE
=}
Pfiou à mon sens ( débutant ) c'était bien plus simple dans les versions antérieurs ! Merci ca m'aide bien tout de même ton exemple
Pfiou à mon sens ( débutant ) c'était bien plus simple dans les versions antérieurs ! Merci ca m'aide bien tout de même ton exemple
Bonsoir,
Je suis débutant et J'ai bien saisi l'exemple du bouton cliquable avec un lien externe, mais comment faire pour que le lien n'ouvre pas une nouvelle fenêtre ou un nouvel onglet?
Merci,
g un souci : si je met le bouton dans un clip, il ne fonctionne plus du tt.
comment faire ?
yoyo => Par défaut, le lien s'ouvre dans la même fenêtre. Tu peux tester en faisant F12 depuis Flash.
zero => En supposant que ton bouton s'appelle monBouton_btn et que ton clip s'appelle monClip_mc, tu créé au début du script, une variable de référence qui pointe vers ton bouton.
var monBouton_btn:SimpleButton = monClip_mc.monBouton_btn;
et ensuite tu utilises le nom de ta variable dans le script défini ci-dessus.
;)
yoyo & tannoy => chez moi aussi ça ouvre un nouvel onglet mais seulement sur Firefox. Avec Safari ça reste dans le même. Par contre je n'ai pas testé avec IE. Quelqu'un sait d'où cette différence peut venir ?
PS: tannoy, je suis super débutant en Flash et AS3 et ton site est vraiment super pour s'en sortir un minimum, merci bcp !
Pardon erreur de ma part... Safari ouvre en réalité dans une nouvelle fenêtre, j'avais pas vu. J'ai pourtant mis exactement le code de cette leçon.
Bonjour,
merci pour ces explications,
& Joyeuses Fêtes à tous ^^,
Je voudrais savoir s'il était possible de mettre à la place d'une URL une adresse m@il ?
Merci d'avance :)
Salut,
Pour eviter d'ouvrir une nouvelle fenêtre, tu dois utiliser le paramêtre "_top" et/ou "_self" au lieu de "_blank".
Salut Niafron,
Pour remplacer l'url par une adresse mail, tu ferais mieux d'utiliser la fonction "getURL()". Ce qui aura pour conséquence d'ouvrir le client mail par défaut du poste client.
ce code m'ouvre aussi un nouvel onglet sous Firefox et j'aimerai que ca ne le face pas.
tu dis de mettre "_top" et/ou " _self" mais je les met ou exactement ? je débute en as 3 et c'est pas très clair désolé :s
Bonjour,
Le paramètre "_self" permet de préciser que l'url doit s'ouvrir dans la même fenêtre, "_blank" permet lui d'indiquer l'ouverture de l'url dans une nouvelle fenêtre.
navigateToURL(url,"_self");
ou
navigateToURL(url,"_blank");
;)
Où doit-on indiquer le paramètre "self" ? Je suis débutant, et je ne trouve pas...
Bon j'ai trouvé mais...
J'ai une erreur de sand box, Security Violation, error 2137 lorsque que j'utilise le self...
J'ai pourtant mis le SWF sur le serveur du site censé l'ouvrir...
Et il est impératif pour mon projet que la page n'en ouvre pas une nouvelle( donc le self obligatoire...)
Une idée ?
Le paramètre "_self" est le deuxième paramètre de la fonction navigateToUrl.
function onClic(pEvt:Event):void {
navigateToURL ( new URLRequest( "http://www.annuaire-football.org" ), "_self" );
}
leBouton_btn.addEventListener(MouseEvent.CLICK, onClic);
;)
Si tu testes ton animation dans un navigateur en faisant F12 depuis Flash, est-ce que tu as toujours ton erreur 2137 ?
;)
Oui, j'ai tenté "local access" / network etc... pour chacun des supports (via mon test en local, et via le site) or rien n'y fait, voici l'erreur :
SecurityError: Error #2137: Violation de la sécurité Sandbox : file:///C:/Documents and Settings/Utilisateur/Bureau/Nathan bouton.swf ne peut pas naviguer la fenêtre _self dans file:///C:/Documents and Settings/Utilisateur/Bureau/Nathan bouton.html (allowScriptAccess correspond à sameDomain). URL tentée : http://www.heroes-france.com.
at global/flash.net::navigateToURL()
at Nathanbouton_fla::MainTimeline/onClic()
En local, et c'est la même sur le site, alors que le SWF est hebergé sur le serveur du dit site. Je suis un peu perdu, et le blank marche sans soucis.
Le problème c'est que je construis en réalité un menu et qu'il me faut absolument l'utilisation de la redirection sur la même page. :/
Je précise que j'ai également changer le "SameDomain" en "Always" mais ça m'a donné encore une autre erreur de sécurité.
bonjour,
je reprends le fil de cet ancien topic pour une question qui fait suite directement au code donné dans cette page :
les liens sous forme d'URL standard fonctionnent en effet sur un bouton flash ; par exemple : http://www.monsite.com/mapageindex.php
Bien.
Mais peut-t-on inscrire aussi, dans le code du bouton en as3, directement dans la ligne URLRequest, une URL php AVEC VARIABLE, DU GENRE :
navigateToURL ( new URLRequest( "http://www.monsite.com/mapage.php?recordID=1" ) );
Est-ce-que ce genre d'URL est prise en compte correctement par Flash, et peut-on donc coder son bouton avec ??
MERCI de bien vouloir me répondre ; j'en ai un besoin extrêmement vital et urgent.
Cordialement,
eNeum
Bonjour eNeum,
De retour de vacances, j'espère ne pas répondre trop tard à ta question.
Les URL possédant des paramètres sont parfaitement prise en compte, il n'y a pas de soucis.
;-)
Bonjour Tannoy,
et merci de ta réponse. Mais le temps passant, et étant pressé, j'avais fini par tester moi-même mon idée pour me rendre compte donc... que ça fonctionne bel et bien. Quoiqu'il en soit, c'est toujours appréciable sinon nécessaire d'avoir une confirmation : c'est chose faite et c'est parfait. Merci encore.
Puisque tu es rentré de vacances, j'en profite cependant pour te soumettre une nouvelle question, qui elle, depuis au moins 3 semaines, est toujours sans réponse... Il s'agit du code "SharedObject". Voici la problématique :
J'ai une animation Flash sur une page php. Elle se joue à l'affichage de la page donc. Mais lorsqu'on revient sur la dite page, elle se rejoue forcément. Or je voudrais qu'elle se bloque à la dernière frame, en cas de ré-ouverture de la page. OK ?
Je me suis donc servi du SharedObject, pour essayer d'écrire un cookie Flash sur le poste client, afin de dire à Flash que si l'animation a déjà été jouée, il faut aller à sa dernière frame.
Mais ça ne marche pas... Et j'ai essayé moults façons avec ce SharedObject... Voici mon code de base :
//on import la classe qui gere les sharedObject
import flash.net.SharedObject;
//on recupere le sharedObject que l'on souhaite
var so:SharedObject = SharedObject.getLocal("monSharedObject");
//on recupere la valeur que l'on veux
var dejaVu:Boolean = so.data.isVue
//Date deja vue on va a la fin
if(dejaVu) gotoAndStop(this.totalFrames)
//on stocke dans le sharedObject le fait que l'on a deja vue l'animation
so.data.isVue = true
//on dit au sharedObject d'enregistrer les changements
so.flush()
Une idée, sinon même une solution pérenne est plus que Bienvenue....
Cordialement,
Neum
Salut Neum,
Si tu fais un trace(dejaVu); qu'est-ce qui est affiché dans la fenêtre de sortie ?
;-)
Bonjour Tannoy,
et vraiment, encore une fois, merci de bien vouloir prendre du temps pour te pencher sur ce problème.
Pour te répondre, c'est très clair : alors même que le code me créé bien le cookie (je suis allé vérifier sur mon disque dur), la sortie de la commande "Trace" est sans appel : FALSE...
Donc le boolean ne doit pas fonctionner. Mais j'avoue ne pas savoir du tout comment le corriger.
C'est même plus ubuesque que ça : lorsque je mets la code du SharedObject sur la première frame du flash, rien ne fonctionne, mais si je le mets sur la troisième - soit après le préloader du fichier en fait - il va effectivement à la dernière frame du Flash MAIS, que l'on ait vu ou non l'animation...
Il y a donc des erreurs. De toutes évidence. Mais je n'ai pas un niveau en AS3 suffisant pour savoir lesquelles...
Une idée ? Merci encore.
Bien cordialement,
Neum
Salut Neum
Ce que tu peux essayer, c'est de stocké la valeur 1 sous forme de chaîne dans ton SharedObject.
Ensuite, tu convertis cette chaîne en booléen au moment où tu la récupères:
;-)
Bonsoir Tannoy,
et ... MERCI. Mille Mercis. A la vérité, j'aurais dû comprendre : à partir du moment où j'appelais un Boolean, la donnée chiffrée sur le data aurait dû me venir...
Ca fonctionne donc à 100%. C'est même mieux que ce que j'avais exposé jusqu'ici par souci de simplicité. Car à la vérité, la page PHP que j'appelle, est en fait appelée depuis 5 boutons différents. Elle se remplit donc 5 fois de données différentes en fonction du bouton appelant. Et dans ces données affichées, se trouve donc mon animation FLASH, mais qui elle aussi est dans 5 versions différentes forcément. Or donc juqu'ici, chaque version se jouait à chaque ouverture de la page.
Mais dorénavant, grâce à ta solution, seule une version appelée de l'animation, à la première ouverture d'une version de la page php, se joue. Les autres, grâce au cookie Flash et son data=1, identique pour toutes les animations, s'ouvrent directement à leurs dernières frames, qui, pour être précis, comportent un bouton lien (c'est lui qui change selon les versions). J'ai juste pris soin de mettre un bouton replay pour ceux qui voudraient rejouer le Flash.
Cela étant, ATTENTION : si on place le code sur son calque Action dans Flash sur la même frame que son preloader de fichier, ça ne marche pas. Et pour cause : pour repérer si le fichier à déjà ou non implanté un cookie, encore faut-il le charger complètement pour l'identifier.
Aussi, mon preloader de départ se situant sur la frame 1 et basculant sur la frame 2 à la fin de son chargement, j'ai implanté le code du SharedObject sur la frame 2. Bref, il faut mettre le code APRÈS tout préloader de départ, sur la frame suivante.
Donc voilà, c'est parfait. MERCI donc, infiniment. Afin que ce code servent pour tous, je le donne ci-après.
Encore Merci.
import flash.net.SharedObject;
var so:SharedObject = SharedObject.getLocal("momquejeveux");
var dejaVu:Boolean = Boolean(Number(so.data.isVue));
if(dejaVu) gotoAndStop(this.totalFrames)
so.data.isVue = "1";
so.flush()
Bien sincèrement et bravo pour ce site qui est bien évidemment dans mes signets...
Neum
Bonjour,
je suis en train de monter un site. Une animation flash avec un lien sur une page html:pb, kan on clique sur le bouton, un bandeau s'ouvre en haut "fenetre publicitaire" et ça ça craint, avez vous une solution ?
Bonjour.
Déjà, je voudrais dire que ce site est très bien fait.
Ensuite j'ai besoin de savoir une chose par rapport aux boutons.
J'ai besoin d'un bouton qui permette à l'utilisateur d'entrer dans mon site.
A priori, ça ne pose pas de problème si le site est déjà sur un FTP.
Auquel cas, on renseigne dans l'Action sur le clic du bouton l'URL de la page HTML concernée et on valide.
Le seul soucis pour moi, c'est que mon site n'est qu'en local pour l'instant et que je ne connais pas la syntaxe pour envoyer vers une page qui n'est pas encore publiée sur le web. En local donc, mais je me répète :-)
Pouvez-vous me renseigner s'il vous plaît.
Je continue de fouiller dans votre site car j'ai bon espoir d'y trouver ma solution.
Cordialement.
Sabine
Sabine,
il y a 2 façons d'écrire une URL pour des liens interactifs :
- En "Absolu"
- En "Relatif"
- En "Absolu" signifie que le lien comporte toute l'url complète depuis le serveur : http://www.monsite.com/mapage.html
- En "Relatif" : c'est beaucoup plus simple : tu ne marques que le nom de ta page à atteindre depuis ton bouton : mapage.html
Tu dois donc marquer ton lien en "Relatif". Et sache que tu peux formater la plupart de tes liens en relatif. Ils fonctionneront en local comme une fois le site en ligne.
Veille simplement à bien marquer le même nom des pages que tu appelles dans l'url de ton lien : même orthographe et syntaxe. OK ?
En espérant t'avoir aidé
Neum,
Je m'en vais essayer cela tout de suite !
Ça paraît simple.
Merci de t'être penché sur ma question.
A +
Sabine
Merci Neum pour cette réponse très claire. Il n'y a rien à ajouter.
Bonjour!
Super forum que je viens de découvrir et devrais m'aider à avancer ;). Une question : Je voudrais faire une adresse e-mail écrite normalement et lorsque l'on clic dessus on ouvre directement le gestionnaire de mail. Je savais le faire en AS2 mais pas en AS3 !!
Bonjour Jack,
Si je puis me permettre, je te propose d'essayer de suivre la procédure suivante :
Créer un texte (de l'adresse mail écrite en clair) sur un calque TEXTE.
Convertir ce texte en symbole BOUTON (F8 ou clic droit de la souris).
Nommer l'occurrence de ce bouton (btn_mail par exemple).
Créer un calque Action et renseigner le code suivant :
btn_mail.addEventListener(MouseEvent.CLICK,gotoMail);
function gotoMail(event:MouseEvent):void{
var url_cible:URLRequest=
new URLRequest("mailto:jack.jack@mail.com");
navigateToURL(url_cible);
}
Voilà, je pense que ça fonctionne.
Chez moi, ça fonctionne mais ça ouvre la messagerie d'Outlook.
Depuis le 30 septembre, tu as déjà dû trouver une solution je suppose.. Oops
Bon courage et bonne journée.
bonjour,
j'espère que ce n'est pas trop tard pour relancer la discussion mais il se trouve que je débute et j'ai un pblm de lien entre un menu flash et une framset:
j'ai fait un site avec 2 frames:
-left (pour menu en flash)
- mainFrame (pour le contenu)
je souhaiterais que les btns de mon menu flash (inséré dans un table de frame "left") affiche une page htlm dans mon cadre de mainframe mais je n'y arrive pas...
Dans mon doc Flash, j'ai rentré le code :
function go2(e:MouseEvent)
{navigateToURL(new URLRequest("site_prom_6flash.html"), "_mainframe");};
home_btn.addEventListener(MouseEvent.CLICK,go2);
mais ça ouvre une nouvelle fenêtre ;-( et avec "_self", ça s'ouvre ds le cadre de left à la place du menu.... :-((
Je sais que les frames ne sont pas terribles mais je souhaite savoir au moins comment résoudre ce pblm...
Malgré mes lectures, je ne vois pas...alors merci pour votre aide !
Bonjour Romain,
Dans ta fonction go2, il faut que tu supprimes l'underscore (_) devant mainframe car le nom de ta frame ne contient pas l'underscore. Attenttion aussi au majuscules et minuscules, mainframe ou mainFrame.
;-)
Yep, ça marche !!
Désolé pour le timing mais MERCI pour ton aide!
Effectivement, je m'étais rendu compte de la majuscule du mainFrame...
En revanche, je n'aurais pas pensé au "_" ;-))
Rom to Tannoy
Bonjour,
Habitué à l'AS2, je souhaite passer à l'AS3.
J'ai le même problème que Ririo, à savoir créer plusieurs boutons, avec un lien différent pour chacun.
Suis-je obligé de copier/coller la totalité du script pour chaque bouton ???
N'y-a-t-il pas un moyen d'automatiser la fonction pour ne plus avoir en variable que le nom du bouton et le lien correspondant ?
Merci
Bonjour Cedo,
Ce que tu peux faire, c'est stocker tes urls dans un objet Dictionnary en utilisant comme clé d'indexation le nom du bouton associé à l'url:
Ensuite, tu crées tes boutons en les nommant bt1, bt2... et tu ajoutes les écouteurs d'évenements:
;-)
je réponds à Ririo qui écrit :L'exemple fonctionne pour 1 bouton et 1 lien, mais pour plusieurs boutons, ça devient brouillon, non? Du coup, j'ai essayé de développer ceci:
très simple dans l'action proposée en haut il y a deux fois dans le script le mot "onClic"
c'est un mot choisi par l'utilisateur que tu peux changer. le premier tu mets par exemple ririo deux fois et pour le deuxième bouton tu mets un autre mot deux fois.
là en laissant
tiens voila un exemple
monBouton_btn.addEventListener(MouseEvent.CLICK,reaction);
function reaction(event:MouseEvent){
navigateToURL(new URLRequest("http://......"));
}
ici il y a reaction et pour le bouton suivant je mettrai reaction1 deux fois
j'espère t'avoir aidé
Hi,
I am using flex 3.0 and facing one problem similar to this.
I have used navigateToUrl(url,"_self"); to export excel .
In localhost everything is working fine while another server , my session is getting lost and user is directed to Login screen again.
What to do to resolve this issue.
while i tried to use _blank instead of _self then session is getting preserved but its opening a new blank window which user would n't un-necessary accept it.
please suggest what to do to preserve the session while using _self..
waiting for quick reply.
Bonjour Pradhad
je ne connais pas le logiciel Flex
en html en plus de _blak et _self il y a également
_parent et _top
tu peux les essayer tu ne risques pas grand chose
bonne chance
coco
Merci coco pour ton aide! En 2012, elle est toujours utile :) !
Merci aussi pour le code donné par tanoy !
Bonne continuation