SWFAddress

SWFAddress en una pequeña utilidad javascript que se usa en conjunción con SWFObject la cual permite insertar links en aplicaciones y websites hechos en flash con lo cual se puede utilizar los botones Adelante, Atras y Recargar del Browser. Además se pueden crear URL únicas con títulos de páginas para aplicaciones flash.

SWFAddress utiliza la funcionalidad ExternalInterface introducida en Flash Player 8 y se ha probado en los siguientes browsers:

  • Internet Explorer 6.0 y 7.0
  • Mozilla Firefox 1.5
  • Safari 2.04
  • Ópera 9.02

Utilización:

Para utilizar este librería es necesario tener SWFObject la cual permite insertar archivos SWF en páginas HTML previniendo los problemas de ActiveX de Internet Explorer. Bueno lo primero es insertar un referencia a los dos javascript:

  1. <script type="text/javascript" src="swfobject.js"></script>  
  2. <script type="text/javascript" src="swfaddress.js"></script>

El siguiente paso es insertar el código necesario en tu película flash:

  1. import flash.external.*;  
  2. _global.SWFAddress = function(){  
  3.    this._check = function() {  
  4.       if (SWFAddress.onChange) {  
  5.           clearInterval(this._interval);  
  6.           ExternalInterface.addCallback('setSWFAddressValue', this, SWFAddress.setValue);  
  7.           SWFAddress.setValue(SWFAddress.getValue());  
  8.       }  
  9.    }  
  10.    this._interval = setInterval(this, '_check', 10);  
  11.    this._value = '';  
  12. };  
  13. _global.SWFAddress = new SWFAddress();  
  14. SWFAddress.getTitle = function():String {  
  15.    var title:String = String(ExternalInterface.call('SWFAddress.getTitle'));  
  16.    if (title == 'undefined' || title == 'null') title = '';  
  17.    return title;  
  18. }  
  19. SWFAddress.setTitle = function(title:String):Void {  
  20.    ExternalInterface.call('SWFAddress.setTitle', title);  
  21. }  
  22. SWFAddress.getValue = function():String {  
  23.    var addr:String = String(ExternalInterface.call('SWFAddress.getValue'));  
  24.    var id:String = String(ExternalInterface.call('SWFAddress.getId'));  
  25.    if (id != 'null') {  
  26.        if (addr == 'undefined' || addr == 'null') addr = '';  
  27.    } else {  
  28.        addr = SWFAddress._value;  
  29.    }  
  30.    return addr;  
  31. }  
  32. SWFAddress.setValue = function(addr:String):Void {  
  33.     if (addr == 'undefined' || addr == 'null') addr = '';  
  34.     ExternalInterface.call('SWFAddress.setValue', addr);  
  35.     SWFAddress._value = addr;  
  36.     if (SWFAddress.onChange) SWFAddress.onChange();  
  37. }

El siguiente paso es redactar la lógica de navegación para nuestro flash.

  1. SWFAddress.onChange = function() {  
  2.      // código para la navegación  
  3. }

Por ejemplo podemos definir el siguiente código de navegación

  1. SWFAddress.onChange = function() {
  2.    var arr = new Array('', '/home', '/blog', '/forum');
  3.    var addr = SWFAddress.getValue();
  4.    gotoAndStop(getIndex(arr, addr));
  5.    SWFAddress.setTitle(formatTitle(addr));
  6. }

En este caso definimos un array donde tendremos las diferentes secciones de nuestro web, el siguiente paso es obtener la sección actual esto con la función getValue. Continuando guiamos al flash al frame especificado por la sección en la que nos encontramos. Finalmente asignamos un titulo a esta sección del flash con la función setTitle.

Finalmente nos queda llamar a esta función desde los botones para que nos muestre la sección solicitada, esto se hace de la siguiente forma:

  1. this.onRelease = function() {  
  2.      SWFAddress.setValue('/home');  
  3. }

Si desean pueden ver un ejemplo funcionando en: http://www.asual.com/swfaddress/samples/flash, además de ello pueden descargar los ejemplos que son muy descriptivos.

Comentarios Total 12 comentarios


renzo_xp
Publicado: 18/11/2006 12:08 am

holas, muy buen tip, justo la solucion que buscaba todo flashero.

gracias

fernandocomet
Publicado: 08/06/2007 4:17 pm

Oye,
Has usado SWFAddress junto con Google Analitycs?
No estoy seguro, creo que me está mandando mis etiquetas dobles porque cada vez que cambia la dirección de la url Google coge un nuevo registro.
??

Christian Portuguez C.
Publicado: 25/06/2008 6:03 pm

usando el fla de SWFAddress que baje de ASUAL SWFAddress NO PUEDO HACER LOS BOTONES MAS DINAMICOS… como puedo anirmarlos desde el action script

Iván Méndez
Publicado: 08/07/2008 11:23 am

Hola podrias ayudarme? he copiado el código en el primer frame de mi flash y al momento de publicar el swf me arrojha tres errores:

**Error** Scene=home, layer=Layer 17, frame=1:Line 1: Syntax error.
import flash.external.*;

**Error** Scene=home, layer=Layer 17, frame=1:Line 14: ‘{‘ expected
SWFAddress.getTitle = function():String

**Error** Scene=home, layer=Layer 17, frame=1:Line 18: Unexpected ‘}’ encountered
}

Total ActionScript Errors: 3 Reported Errors: 3

A que se deberá, solo he llegado hasta aqui no he copiado los demas codigos, ademas estos debiera copiarlos a continuación del codigo mas grande?

Saludos

Iván Méndez

Pablo Bandin
Publicado: 09/11/2008 4:40 pm

Hola, les dejo la url a un proyecto que busca la misma solución que el swfAddress pero lo encara de una forma distinta. Se trata del SWFTracker. Estoy trabajando en una mejor documentación e incorporar algunas cosas que me quedaron pendientes como el history managment.

http://code.google.com/p/swftracker/


[…] este apunte voy a utilizar ActionScript 3 (ya hay un ejemplo muy bueno en AS2 en unijimpe), que es el que recomiendo utilizar. Además, necesitaremos también la librería SWFObject para […]

Odio a Flash | Código Flash - PHP
Publicado: 14/02/2009 10:21 am

[…] el uso del botón Atrás de los navegadores es uno resuelto en gran porcentaje, gracias a SWF Address; la indexación en buscadores, aun esta en proceso pero se ha avanzado mucho en […]


[…] ejemplos en funcionamiento y teneis un magnífico tutorial de su funcionamiento y aplicación en unijimpe. Que no os intenten vender la moto de que flash es negativo para el SEO porque si antes esta […]

Yo
Publicado: 13/05/2009 3:27 am

Me da un monton de errores dentro del propio flash, los errores son del codigo que se importa del .as

Alguien sabe porque?

Gracias

malu
Publicado: 23/07/2009 4:30 pm

estoy utilizando este tutorial, y los cambios se reflejan en la url, bah, en la barra de direcciones, pero no logro hacer funcionar los botones de adelante y atras del navegador;
alguien me puede dar una mano? muchas gracias!

Gabriel
Publicado: 02/02/2010 1:53 pm

tal vez revivo tema antiguo pero, en actionscript 3.0 es código es muuucho mas fácil y sencillo de entender para los no expertos.

Eloy Monter
Publicado: 06/07/2011 11:54 am

Hola que tal, he tenido un error al publicar mi página, me marca un error “1046: Type was not found or was not a compile-time constant: void” no se a que se deba… alguien puede explicarme cómo lo uso correctamente? tengo éste código (cabe mencionar que los errores que me marca son en la primera parte, linea 19 y linea32) me podrían pasar un ejemplo en .fla?…

//———————- NAVEGACIÓN ———————–
SWFAddress.onChange = function() {
var arr = new Array(”, ‘/principal’, ‘/Quienes somos’, ‘/Servicios’,’/Imagenes’,’Videos’, ‘Contacto’);
var addr = SWFAddress.getValue();
gotoAndStop(getIndex(arr, addr));
SWFAddress.setTitle(formatTitle(addr));
}
//———————– BOTONES ————————–
boton1_mc.addEventListener (MouseEvent.CLICK,funcionbtn1);

function funcionbtn1(e:MouseEvent):void{
contenedor_mc.source = “HOME.swf”;
SWFAddress.setValue(‘/Principal’);
aparece.start();
}

//— De antemano muchas gracias por la ayuda! Éxito! —//

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)