Précédent   Forum du club des développeurs et IT Pro > Webmasters - Développement Web > Flash/Flex
Flash/Flex Forum d'entraide sur les technologies Flash et Flex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/01/2011, 16h46   #1
Barbie614
Invité de passage
 
Inscription : janvier 2011
Messages : 1
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 1
Points : 0
Points : 0
Par défaut SWFAddress et site Flash

Novice en flash (code), je travaille depuis 1 mois et demi sur mon site. Oui c'est long, mais je découvre et essaie de faire les choses dans les règles.

Là où je bloque c'est sur le SWFAddress. Je voudrais deux choses :
Que la barre d'adresse s'actualise en fonction de la partie sélectionnée dans le menu (mon trace affiche le bon resultat à chaque click).
Que je puisse utiliser les fleches du navigateur (préc / suiv).

J'ai tout codé via des tutos pour obtenir ceci. Je suis plutôt sûr de mon code, les fichiers js et as du swfaddress sont à la bonne place. Et pourtant ça ne marche pas. Alors oui il y a un problème. MAis lequel ?
Voici le code de mon menu :

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package fr.noe.dvd.menu
{
	import com.asual.swfaddress.SWFAddress;
	import com.asual.swfaddress.SWFAddressEvent;
	import com.greensock.TweenMax;
	import com.greensock.easing.Quad;
 
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.net.navigateToURL;
	import flash.utils.Dictionary;
	import flash.utils.setTimeout;
 
	import fr.noe.dvd.menu.MenuEvent;
	import fr.noe.dvd.menu.MenuItem;
 
	[Event(name="menuChange", type="fr.noe.dvd.menu.MenuEvent")]
 
	public class Menu extends MovieClip
	{
		public var MenuMask:MovieClip;
		public var menuTexture:MovieClip;
 
		private var xmlLoader:URLLoader;
		private var xmlData:XML;
		//private var menuItems:Array;
 
		private var currentItem:MenuItem;
		public function Menu()
		{
			init()
		}
 
		private function init():void
		{
 
			menuTexture.mask = MenuMask;
 
			xmlLoader = new URLLoader();
			xmlLoader.addEventListener(Event.COMPLETE, onXMLLoadComplete );
			xmlLoader.load( new URLRequest( 'data/xml/menu.xml' ) );
		}
 
		private function onXMLLoadComplete( event:Event = null ):void
		{
			xmlData = new XML( xmlLoader.data );
			var items:XMLList = xmlData.item;
			var n:int = items.length();
			var mi:MenuItem;
 
			while( n-- )
			{
				mi = new MenuItem( items[n] );
				mi.y = n * MenuItem.ITEM_HEIGHT;
				addChild( mi );
			}
 
			addEventListener( MouseEvent.CLICK, onClick );
 
			var path:String = SWFAddress.getPath();
			if ( path.length < 2 )
			{
				selectID( items[0].@uid );
			}
 
			SWFAddress.addEventListener( SWFAddressEvent.EXTERNAL_CHANGE, onSWFAddressChange );
		}
 
		private function onClick( event:MouseEvent = null ):void
		{
			if ( event.target is MenuItem && currentItem != event.target )
			{
 
				if ( currentItem ) currentItem.selected = false;
 
				selectItem( MenuItem( event.target ) );
				SWFAddress.setValue( currentItem.id );
			}
		}
 
		private function onSWFAddressChange( event:SWFAddressEvent ):void
		{
			if ( event.pathNames.length )
			{
 
				var nid:String = event.pathNames[0];
 
				if ( !currentItem || currentItem.id != nid )
				{
					selectID( nid );
				}
			}
		}
 
		private function selectID( nid:String ):void
		{
			var n:int = numChildren;
			var d:DisplayObject;
			while( n-- )
			{
				d = getChildAt( n );
				if ( d is MenuItem && MenuItem(d).id == nid )
				{
					selectItem( MenuItem(d) );
					break;
				}
			}
		}
 
		private function selectItem( ni:MenuItem ):void
		{
			if ( currentItem ) currentItem.selected = false;
 
			currentItem = ni;
			currentItem.selected = true;
			TweenMax.to( MenuMask, .4, { y: currentItem.y, ease: Quad.easeOut } );
 
			dispatchEvent( new MenuEvent( currentItem.id ) );
 
 
		}
	}
}


Mon MenuEvent :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package fr.noe.dvd.menu
{
	import flash.events.Event;
	import fr.noe.dvd.menu.MenuItem;
	import fr.noe.dvd.menu.Menu;
 
 
	public class MenuEvent extends Event
	{
		public static const MENU_CHANGE:String = 'menuChange';
 
		public var itemID:String;
 
		public function MenuEvent( id:String, type:String = 'menuChange', bubbles:Boolean=false, cancelable:Boolean=false)
		{
			itemID = id;
			super(type, bubbles, cancelable);
		}
	}
}


Au cas où, mon MenuItem :
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package fr.noe.dvd.menu
{
 
	import com.greensock.TweenMax;
	import com.greensock.easing.Quad;
	import com.asual.swfaddress.SWFAddress;
	import com.asual.swfaddress.SWFAddressEvent;
 
	import fr.noe.dvd.menu.MenuEvent;
 
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;
 
	public class MenuItem extends Sprite
	{
		public static var ITEM_WIDTH:int = 150;
		public static var ITEM_HEIGHT:int = 24;
 
		public var source:XML;
		private var field:TextField
		private var _selected:Boolean;
 
		public function MenuItem( src:XML )
		{
			source = src;
			init();
		}
 
		private function init( ):void
		{
			mouseChildren = false;
			buttonMode = true;
			selected = false;
 
			field = new TextField();
			field.width = ITEM_WIDTH;
			field.height = ITEM_HEIGHT;
			field.selectable = false;
			field.embedFonts = true;
			field.defaultTextFormat = new TextFormat( 'Caviar Dreams', 20, 0xffffff, false, false, false, '', '', TextFormatAlign.RIGHT, 0, 4 );
			field.text = source;
			addChild( field );
 
			addEventListener( MouseEvent.ROLL_OVER, onRollOver );
			addEventListener( MouseEvent.ROLL_OUT, onRollOut );
		}
 
		private function onRollOver( event:MouseEvent = null ):void
		{
			if ( !_selected ) TweenMax.to( this, .2, { tint:0xff0000 } );
		}
 
		private function onRollOut( event:MouseEvent = null ):void
		{
			if ( !_selected ) TweenMax.to( this, .45, {removeTint:true } );
		}
 
		public function get id():String
		{
			return source.@uid;
		}
 
		public function set selected( v:Boolean ):void
		{
			if ( v )
			{
				_selected = true;
				buttonMode = false;
				mouseEnabled = false;
				TweenMax.to( this, .6, { tint:0x000000} );
 
			}
			else
			{
				_selected = false;
				buttonMode = true;
				mouseEnabled = true;
				onRollOut();
			}
		}
	}
}

Et tant que j'y suis, ma page :

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package fr.noe.dvd
{
	import com.greensock.TweenMax;
	import com.greensock.easing.Quad;
	import com.asual.swfaddress.SWFAddress;
	import com.asual.swfaddress.SWFAddressEvent;
 
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.events.Event;
 
	import fr.noe.dvd.menu.Menu;
	import fr.noe.dvd.menu.MenuEvent;
 
	public class Noetevisdub extends MovieClip
	{
		public var navig:MovieClip;
		public var fond01:MovieClip;
		public var fond02:MovieClip;
		public var fond03:MovieClip;
		public var codeV:MovieClip;
		public var codeH:MovieClip;
		public var mec:MovieClip;
		public var bas_mec:MovieClip;
		public var real:MovieClip;
		public var texte:MovieClip;
		public var menu:Menu;
 
		public function Noetevisdub()
		{	
			if (stage ) init();
			else addEventListener( Event.ADDED_TO_STAGE, init);
		}
 
		private function init( event:Event = null ):void
		{	
			removeEventListener( Event.ADDED_TO_STAGE, init );
 
			var n:int = numChildren;
			var d:DisplayObject;
			for( var i:int = 0; i < n; i++)
			{
				d = getChildAt(i);
 
				switch( d )
				{
					case fond03:
						TweenMax.from( d, 1, { alpha: 0, x: +d.width, ease: Quad.easeOut } );
						break;
 
					case fond01:
						TweenMax.from( d, .5, { alpha: 0, x: -d.width, delay: .5, ease: Quad.easeOut } );
						break;
 
					case fond02:
						TweenMax.from( d, .5, { alpha: 0, x: -d.width, delay: .5, ease: Quad.easeOut } );
						break;
 
					case navig:
					case menu:
						TweenMax.from( d, 3, { alpha: 0, delay: 1, ease: Quad.easeOut } );
						break;
 
					case codeV:
						TweenMax.from( d, .5, { alpha: 0, delay: 2, ease: Quad.easeOut } );
						break;
 
					case codeH:
						TweenMax.from( d, .5, { alpha: 0, delay: 2.5, ease: Quad.easeOut } );
						break;
 
					case mec:
						TweenMax.from( d, 2, { alpha: 0, x: -d.width, delay: 1, ease: Quad.easeOut } );
						break;
 
					case bas_mec:
						TweenMax.from( d, 1, { alpha: 0, x: -d.width, delay: 2, ease: Quad.easeOut } );
						break;
 
					case real:
						TweenMax.from( d, .5, { alpha: 0, delay: 1.5, ease: Quad.easeOut } );
						break;
 
					case texte:
						TweenMax.from( d, 2, { alpha: 0, delay: 2, ease: Quad.easeOut } );
						break;
 
 
 
					default :
						TweenMax.from( d, .4, { alpha: 0, y: -d.height, delay: .2*i, ease: Quad.easeOut } );
						break;
				}
 
			}
 
			menu.addEventListener( MenuEvent.MENU_CHANGE, onMenuChange );
		}
 
		private function onMenuChange( event:MenuEvent ):void
		{
			trace( event.itemID );
		}
 
	}
}

Je suis désolé d'arriver et de vous bombarder de code, mais c'est vraiment la solution de la dernière chance, je suis perdu depuis 2 semaines sur ce problème.
Barbie614 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 10h33   #2
The_Pretender
Rédacteur

 
Avatar de The_Pretender
 
Homme Matthieu DELOISON
Formateur ActionScript Flash
Inscription : juin 2004
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Matthieu DELOISON
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Formateur ActionScript Flash
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2004
Messages : 650
Points : 3 794
Points : 3 794
Bonjour,

Pour utiliser SWFAddress, j'ai régidé un tutoriel avec le code source.
Je t'invite à le consulter : Utiliser SWFAddress
__________________
Découvrez : Tutoriels, ressources AS2 et AS3
Développez des applications et des jeux Flash en ActionScript 3 : ActionScript-Facile.com
Voulez-vous créer des applications performantes, à chaque fois, en un temps record ? Développement Facile.com
The_Pretender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 09h02   #3
Androide777
Invité de passage
 
Inscription : octobre 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 3
Points : 3
Points : 3
J'ai exactement le même problème...

Quand je teste en offline, le swfadress marche bien ( changement url, back/forward boutons) mais des que je teste sous wamp ou sur mon serveur ovh rien ne marche. Comme si le javascript n'était jamais appelé...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
	<head>
		<title>Mon site</title>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<script type="text/javascript" src="js/swfobject.js"></script>
		<script type="text/javascript" src="js/SWFAddress.js"></script>
		<script type="text/javascript">
			var flashvars = {};
			var params = {};
			params.allowscriptaccess = "always"; 
			var attributes = {}; attributes.id = "site";
			swfobject.embedSWF("preloader.swf", "myAlternativeContent", "100%", "100%", "10.0.0", "expressInstall.swf", flashvars, params, attributes);
		</script>
	</head>
j'ai tout vérifié, il me semble, seules me restent les choses auxquelles je n'ai pas pensé... ET puis ca marche parfaitement offline 8|!!!!!

pleaz help!

Merci
Androide777 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 10h12   #4
The_Pretender
Rédacteur

 
Avatar de The_Pretender
 
Homme Matthieu DELOISON
Formateur ActionScript Flash
Inscription : juin 2004
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Matthieu DELOISON
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Formateur ActionScript Flash
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2004
Messages : 650
Points : 3 794
Points : 3 794
Bonjour,

Est ce que tu as créé le fichier .htaccess correspondant ?
__________________
Découvrez : Tutoriels, ressources AS2 et AS3
Développez des applications et des jeux Flash en ActionScript 3 : ActionScript-Facile.com
Voulez-vous créer des applications performantes, à chaque fois, en un temps record ? Développement Facile.com
The_Pretender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 11h46   #5
Androide777
Invité de passage
 
Inscription : octobre 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 3
Points : 3
Points : 3
non effectivement... J'ai essayé de le mettre en place en suivant les consignes des tutos, mais cela ne marchait pas mieux... Je me suis surement trompée

j'ai un htaccess/htpassword préexistant qui me permet de contrôler les venues sur mon site.
Que dois-je y rajouter pour que le swfadress fonctionne?
Androide777 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 12h27   #6
The_Pretender
Rédacteur

 
Avatar de The_Pretender
 
Homme Matthieu DELOISON
Formateur ActionScript Flash
Inscription : juin 2004
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Matthieu DELOISON
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Formateur ActionScript Flash
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2004
Messages : 650
Points : 3 794
Points : 3 794
Il suffit de suivre pas à pas ce tutoriel sur SWFaddress.

Exemple de fichier .htaccess :
Code :
1
2
3
4
5
6
7
# le répertoire de base pour SWFAddress
RewriteBase  /ressources
 
RewriteCond  %{REQUEST_FILENAME}    !-f
RewriteCond  %{REQUEST_FILENAME}    !-d
# le nom de votre fichier php qui affiche le flash avec swfaddress et swfobject
RewriteRule  .*                     swfaddress_exemple.php
__________________
Découvrez : Tutoriels, ressources AS2 et AS3
Développez des applications et des jeux Flash en ActionScript 3 : ActionScript-Facile.com
Voulez-vous créer des applications performantes, à chaque fois, en un temps record ? Développement Facile.com
The_Pretender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 17h50   #7
Androide777
Invité de passage
 
Inscription : octobre 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 3
Points : 3
Points : 3
Bonjour,

c'est bon j'ai réglé mon problème... Apparemment, il faut bien faire attention à ne pas passer dans le setValue() une chaine de caractère avec des majuscules! Bizarre mais bon, une fois cela fait le swfAddress marchait très bien!

Par contre je me suis attelée au SEO, j'ai essayé de mettre en place le système du tuto, ça ne marchait pas et j'ai essayé de me débrouiller toute seule. Je suis arrivé au résultat escompté mais je me demande si ma méthode est véritablement optimisée.
Je ne serai pas contre un petit avis

1) Mise en place du swfAddress dans le flash
2) Intégration du site Flash dans une page index.php grace au SWFObject
3) Ajout dans le htaccess d'une récriture d'url :
Code :
1
2
3
4
5
6
7
8
 
# le répertoire de base pour SWFAddress
RewriteBase  /ressources
 
RewriteCond  %{REQUEST_FILENAME}    !-f
RewriteCond  %{REQUEST_FILENAME}    !-d
# le nom de votre fichier php qui affiche le flash avec swfaddress et swfobject
RewriteRule  .*                     index.php
4) Création du robots.txt qui renvoie sur un sitemap.xml
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
 
<?xml version="1.0" encoding="UTF-8"?>
 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
   <url>
      <loc>http://www.monsite.fr/page1</loc>
      <changefreq>monthly</changefreq>
      <priority>0.5</priority>
   </url>
   <url>
      <loc>http://www.monsite.fr/page2</loc>
      <changefreq>monthly</changefreq>
      <priority>0.5</priority>
   </url>
   <url>
      <loc>http://www.monsite.fr/page3</loc>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
   </url>
   <url>
      <loc>http://www.monsite.fr/page4</loc>
      <changefreq>monthly</changefreq>
      <priority>0.2</priority>
   </url>
</urlset>
5) une mise a jour dynamique de mon contenu alternatif de index.php en PHP.

6) une détection du User Agent en PHP qui me permet de modifier l'url de la page en javascript, si je n'ai pas a faire au bot google.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
$ua = $_SERVER['HTTP_USER_AGENT'];
		if (strpos($ua, "Googlebot/2.1") == false)
		{
			echo '<script type="text/javascript">
			var _protocol = window.location.protocol;
			var _host = window.location.host;
			var _pathname = window.location.pathname
			var curl = document.URL;
			var section = _pathname.replace("/", "");
			if ( curl.indexOf("#") < 0)
			{
			var _url = _protocol + "//" + _host + "/#/" + section;
			window.location.replace(_url);
			}
			</script>';
		}
Ce petit script me permet de tranformer un http://www.monsite.fr/page1 (cf sitemap.xml) en http://www.monsite.fr/#/page1, si ce n'est pas le googlebot qui essaie d'accéder à mon site. Ainsi flash et swfaddress fonction très bien.

Je ne sais pas cependant si cette méthode peut me poser des problème pour le référencement. Je sais que le googleBot n'aime pas "window.location.replace" mais celui-ci n'est pas censé apparaitre si c'est le bot qui visualise la page...

Qu'en pensez-vous?
Androide777 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2012, 16h33   #8
batt_pooza
Invité de passage
 
Homme
Inscription : avril 2012
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2012
Messages : 1
Points : 1
Points : 1
Par défaut probleme SWFAddress

bonjour

Androide777 j'ai le même problème que toi et je n'ai pas compris comment tu avais résolu le problème par rapport a ton setValue et a sa chaine de caractère.

merci pour l'aide
batt_pooza est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h29.


 
 
 
 
Partenaires

Hébergement Web