Cuando estamos haciendo sites híbridos, osea páginas XHTML con partes en Flash, es probable que esas partes en Flash sean la cabecera o algún menú que es común para todas las páginas.
Pero aun siendo común para todas las páginas es probable que necesitemos que ese SWF tenga unas características asignadas dependiendo de la página en la que se encuentre. Por ejemplo, que el botón de la sección en la que nos encontremos esté iluminado, o que el SWF se inicie reproducciendo una animación concreta para cada sección.
La solución más fácil sería crear un SWF independiente para cada página con los parámetros que nos interesa para cada página.. pero eso nos resultaría un trabajo bastante tedioso.
Lo mejor es hacer que el propio SWF se inicie con unos parámetros diferentes según el HTML en el que esté colocado.
Para saber en que página estamos utilizaremos el objeto location de Javascript, y ExternalInterface de Actionscript.
Pondremos este código al inicio de la pelicula:
Código :
var ruta:Array = String(ExternalInterface.call("function href(){return (location.href)}")).split("/");
var pagina:String = ruta[ruta.length - 1].replace(".htm","");
Con esto sabremos el nombre del archivo HTML en el que se encuentra ejecutandose el SWF. Apartir de ahi asignaremos los parámetros que nos interese para cada caso.
Por ejemplo haremos que según la página en la que estemos iniciaremos la película en un fotograma u otro:
Código :
var num:uint;
switch (pagina)
{
case "servicios" :
num = 2;
break;
case "descargas" :
num = 3;
break;
case "contacto" :
num = 4;
break;
default :
num = 1;
}
gotoAndStop(num);
Como mencioné antes, esto podría mejorar usando un XML en vez de un switch-case, pero realmente es un gran tip. Seguro le ayudará a muchos. Por:Freddie
Hola:
Hace mucho que buscaba solución a este "problema" gracias ...... pero es posible que expliques un poco más de donde hay que colocar los codigos, como dicen en mi pais "como si fuese un niñito de 5 años" .... gracias y quedo a la espera de tus comentarios Por:Cristian-blog
Cristian-blog :
Hola: Hace mucho que buscaba solución a este "problema" gracias ...... pero es posible que expliques un poco más de donde hay que colocar los codigos, como dicen en mi pais "como si fuese un niñito de 5 años" .... gracias y quedo a la espera de tus comentarios
En el tip lo dice, todo ese código va seguido en el primer fotograma de tu película (o en el constructor de la clase Main). Por:Zguillez
no entiendo Podrías explicar como se supone que el algoritmo sabe en que html esta?
ejem
{
case "contacto" : // Contacto es el nombre del .htm de la sección o como?
no entiendo Podrías explicar como se supone que el algoritmo sabe en que html esta?
ejem { case "contacto" : // Contacto es el nombre del .htm de la sección o como?
de antemano gracias.
"contacto" es el nombre del html , osea -> contacto.html
Eso lo recuperas ejecutando una función javascript con ExternalInterface que te devuelve location.href. Con el split("/") divides la ruta por carpetas y obtines la última que es el nombre de la página. Con el replace() eliminas la extensión, con lo que te quedas solo con el nombre. Y listo
var ruta:Array = String(ExternalInterface.call("function href(){return (location.href)}")).split("/"); var pagina:String = ruta[ruta.length - 1].replace(".htm",""); Por:Zguillez
No deberia de depender de la extensión. Deberia de quitarse automáticamente.
Siguiendo con el ejercicio del split aqui un one-liner
Código :
var pagina:String = String(ExternalInterface.call("function href(){ return local.href; }")).split("/").pop().split(".").slice(0, -1).join(".");
Cierto, asi es más práctico Gracias por el aporte Fernando Por:Zguillez
Muy útil el Tip. Aunque yo siempre lo he hecho con la ayuda de PHP y el swfObject de Javascript.
Una pregunta, como es un Javascript, ¿Funciona en todo Navegador+Sistema? Por:gcm
Creo q esto sirve mas para deep linking no se...
creo q Freddie tiene razón por el lado que se puede hacer un archivo de configuración por xml que se puede cargar desde una base de datos.
Cada uno lo aplica como mejor le parezca. Por:absulit
Disculpa no hay nada parecido pero para Actionscript 2 es que ya tengo mi top en Actionscript 2 y quisiera hacer esto mismo Por:Javier Ramos-blog
Javier Ramos-blog :
Disculpa no hay nada parecido pero para Actionscript 2 es que ya tengo mi top en Actionscript 2 y quisiera hacer esto mismo
En AS2 puedes llamar a esa función javascript con getURL(); Por:Zguillez
me podrias detar un poco mas el Script por favor Por:Javier Ramos-blog
Hola Zguillez:
Bueno he probado tus codigos de varias formas y no logro dar con el resultado.
Te explico:
El header es en flash y común para todas las paginas de sitio y cada botón debe quedar encendido cuando navegue por ellas.
En el header tengo un preload......
Preguntas
1.-Donde coloco el código 1 que señalas?
var ruta:Array = String(ExternalInterface.call("function href(){return (location.href)}")).split("/");
var pagina:String = ruta[ruta.length - 1].replace(".htm","");
2.- y donde coloco el otro codigo?
var num:uint;
switch (pagina)
{
case "servicios" :
num = 2;
break;
case "descargas" :
num = 3;
break;
case "contacto" :
num = 4;
break;
default :
num = 1;
}
gotoAndStop(num);
3.- Con el aporte de Fernando, cambia algo?
Gracias, me ayudarias mucho Por:netsolweb-blog
ww Por:ww-blog
cordial saludo, es justamente lo que buscaba para que los servidores externos de la empresa puedan medir los links, pero aun así no me funciona... coloco todo eso en el primer frame (y me sale un error de no encontrar la clase uint) y cambio los nombres de las paginas web, pero nada, espero que no sea el script que me quita los macos de IE. gracias por su ayuda Por:rowilson
Hola otra vez, como crei que era el AS2 hago el llamado del actionS con geturl
var pagina:String = String(ExternalInterface.call("function getURL(){ return local.href; }")).split("/").pop().split(".").slice(0, -1).join(".");
y tampoco, espero alguien me pueda ayudar Por:rowilson
esto es AS3 no es cierto?, hay forma de hacerlo en AS2? Por:diegood