+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Invité de passage
    Inscrit en
    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.

  2. #2
    Rédacteur

    Avatar de The_Pretender
    Homme Profil pro
    Formateur Développement / Programmation
    Inscrit en
    juin 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Formateur Développement / Programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2004
    Messages : 737
    Points : 4 369
    Points
    4 369

    Par défaut

    Bonjour,

    Pour utiliser SWFAddress, j'ai régidé un tutoriel avec le code source.
    Je t'invite à le consulter : Utiliser SWFAddress
    Développez des Applications Web Performantes avec la Formation Vidéos Developpez : Programmation Facile

    Découvrez : Tutoriels, ressources AS2 et AS3

  3. #3
    Invité de passage
    Inscrit en
    octobre 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 3
    Points : 4
    Points
    4

    Par défaut

    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

  4. #4
    Rédacteur

    Avatar de The_Pretender
    Homme Profil pro
    Formateur Développement / Programmation
    Inscrit en
    juin 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Formateur Développement / Programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2004
    Messages : 737
    Points : 4 369
    Points
    4 369

    Par défaut

    Bonjour,

    Est ce que tu as créé le fichier .htaccess correspondant ?
    Développez des Applications Web Performantes avec la Formation Vidéos Developpez : Programmation Facile

    Découvrez : Tutoriels, ressources AS2 et AS3

  5. #5
    Invité de passage
    Inscrit en
    octobre 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 3
    Points : 4
    Points
    4

    Par défaut

    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?

  6. #6
    Rédacteur

    Avatar de The_Pretender
    Homme Profil pro
    Formateur Développement / Programmation
    Inscrit en
    juin 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Formateur Développement / Programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2004
    Messages : 737
    Points : 4 369
    Points
    4 369

    Par défaut

    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éveloppez des Applications Web Performantes avec la Formation Vidéos Developpez : Programmation Facile

    Découvrez : Tutoriels, ressources AS2 et AS3

  7. #7
    Invité de passage
    Inscrit en
    octobre 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 3
    Points : 4
    Points
    4

    Par défaut

    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?

  8. #8
    Invité de passage
    Homme Profil pro
    Inscrit en
    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

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
  •