El fin del getURL(“javascript:”)

September 26th, 2005 | by |

Con la nueva version del Flash player 8 y todas sus nuevas directivas de seguridad el uso de la opción getURL(“javascript:”), fsCommand y sendVars para interactuar con el navegador han quedado en desuso.

Al intentar ejecutar la siguiente linea de codigo:

on (release) {
getURL("javascript:void(alert"Hola Mundo")");
}

Nos encontraremos con una ventana de alerta que nos dice;

”Macromedia Flash Player a detenido una operación que podria no ser segura.“

Este simple mensaje podría hacer montar en colera o generar un ataque de panico en cualquiera de nuestros usuarios .Pero la posibilidad de interactuar con el navegador no ha sido eliminada y podremos seguir trabajando libremente con el entorno con la función ExternalInterface.

//Para realizar la misma acción sin que nos aparezca el mensaje de alerta primero importamos la clase correspondiente
import flash.external.ExternalInterface;

//definimos la funcion que interactuara con el javascript de nuestra pagina
var llamar:Function = function() : Void {

var txt:String = "Hola Mundo";
ExternalInterface.call("alerta", txt);
}

//en base a un boton creado con el nombre instancia boton ejecutamos la función al hacer click
boton.addEventListener("click", mx.utils.Delegate.create(this,llamar) ) ;

y en nuestra pagina html definimos la función javascript:


function alerta(txt){
alert(txt)
}

Ejemplo Funcionando

Archivos de Ejemplo

  1. 27 Responses to “El fin del getURL(“javascript:”)”

  2. By Pablo on Nov 14, 2005 | Reply

    Esto significa q no funcionarian el getURL(javascript:window.open)? o sea q se acabo la posibilidad de abrir popups desde un swf?

  3. By Charly on Nov 14, 2005 | Reply

    La opcion sigue solo se cambio una opcion de seguridad por la cual puede llegar a aparecer este mesaje de error.

  4. By Pablo on Nov 15, 2005 | Reply

    ok, la pregunta viene a q son varias las personas q estan teniendo problemas con los popups disparados desde el flash player 8, no funcionan en local pero si online, otros ni siquiera funcionan.

  5. By loli on Nov 21, 2005 | Reply

    Resulta que he probado ha hacer este ejemplo con ExternalInterface y me sigue saliendo la misma pantalla de error cuando lo pruebo, podríais ayudarme.
    También he buscado en otros sitios otros ejemplos y tampoco me salen porque siempre sale la ventana de error. Mi problema es que estoy trabajando en un proyecto bastante grande y no podría ir cambiando la configuración de cada ordenador que utilice mi programa, porque se utilizará vía web, así que necesito hacer mi trabajo sin que me salga el ventanón. Gracias de antemano por la ayuda.

  6. By Charly on Nov 21, 2005 | Reply

    Proba de esa misma forma pero on-line deberia funcionar, saludos.

  7. By loli on Nov 21, 2005 | Reply

    Soy nueva en todo esto. Podrías explicarme qué quieres decir con que lo haga on-line?
    ¿Te refieres a que en las opciones de configuración de la publicación escoja acceder sólo a la red?
    Necesito ayuda. Gracias.

  8. By Pablo Quinteros on Nov 24, 2005 | Reply

    Les voy a explicar un truco para poder utilizar el getURL(”JavaScript”) con un solo cambio en el html. Pero antes de nada les paso a explicar algo de seguridad para que se entienda como funciona.

    En primer lugar este ejemplo puede no funcionar localmente porque sólo se concede el privilegio SWF-HTML a los archivos locales de confianza debido a los posibles desajustes entre los modelos de seguridad de Flash Player y los navegadores Web (fscommand
    ,getURL(”javascript”), ExternalInterface.call).

    Para que funcione nuestro getURL(”javaScript”) tanto local en red o online,hay que agregar un parametro, que se llama, allowScriptAccess.

    Los posibles valores de allowScriptAccess son:

    always: Siempre permite las llamadas de ActionScript a JavaScript

    sameDomain: Sólo permite las llamadas de ActionScript a JavaScript cuando el SWF y la página HTML proceden del mismo dominio

    never: Nunca permite las llamadas de ActionScript a JavaScript.

    Es decir que para que funcione siempre nuestro getURL(”javascript”) tenemos que agregar en la etiqueta

    Ahora ustedes se preguntarán cual es el motivo de esta seguridad. En sintesis se debe a que en Flash Player 7 y versiones anteriores, si alguien con malas intenciones conseguía convencer a un usuario para que descargara y ejecutara un archivo SWF, dicho archivo SWF local podía combinar dos privilegios para llevar a cabo sus nefastas operaciones: Podía leer archivos de texto de ubicaciones conocidas (o adivinadas) del sistema de archivos del usuario -utilizando, por ejemplo, XML.load()- y luego enviar el contenido de dichos archivos al atacante. Lo que se pretende evitar con los cambios en la seguridad local de Flash Player 8 es el patrón de espionaje de archivos.

    Bueno, espero que les alla servido.
    Saludos a todos!

  9. By Pablo Quinteros on Nov 24, 2005 | Reply

    Les paso el parámetro para que les funcione siempre el getURL(”javaScript”)para copiar y pegarlo dentro del object.

    o si queres que funcione simpre y cuando lo llamemos del mismo dominio

  10. By Pablo Quinteros on Nov 24, 2005 | Reply

    param name=”allowScriptAccess” value=”always”

    o si queres que funcione simpre y cuando lo llamemos del mismo dominio

    param name=”allowScriptAccess” value=”sameDomain”

  11. By Sergio on Jan 26, 2006 | Reply

    Hola Pablo, disculpa la molestia pero sigue sin andar…

  12. By Yosip on Feb 2, 2006 | Reply

    Hola, he leido vuestro tema sobre el fin del getURL, me parece muy interesante porque ahora estoy desarrollando una web que a traves de un boton de flash 8 oculta o muestra unas capas de una pagina HTML.
    He intentado visualizar el ejemplo que teneis colgado en vuestra web y no carga la película y tambien he descargado los archivos de ejemplo pero no me funcionan. Cuando abro la pagina “externalinterface.html” y hago click en el boton no me muestra el mensaje de “hola mundo”.

    Queria saber si podiais volver a colgar el ejemplo para poder visualizarlo e intentar incorporar el codigo en mi web.
    muchas gracias por vuestra ayuda.

  13. By César on Mar 9, 2006 | Reply

    Necesito abrir una pagina con una pelicula en flash, pero hasta ahora no funciona nada de lo que intente…por favor si pudieran ayudarme se los agradeceria

  14. By Jarzhino on Jun 12, 2006 | Reply

    Hola, soy nuevo en esto de flash: He creado un boton y al parecer he logrado poner el link, pero cuando lo pruebo en una pagina no me lleva a ningun lado. Uso apache 2. Gracias por tu ayuda

  15. By Daniel Avellán on Aug 3, 2006 | Reply

    quiero realizar una comunicacion de flash usando javascript, usando el ExternalInterface.addCallBack, pero al momento de funcionar con la pagina HTML, no hace nada, que puedo hacer. gracias

  16. By victor on Aug 14, 2006 | Reply

    la verdad quisiera saber como funciona pero los link no funcionan para ver los ejemplos

  17. By angelina jolie naked on Aug 15, 2006 | Reply

    Array

  18. By victoria secret models gallery on Aug 16, 2006 | Reply

    Array

  19. By Edgar on Sep 21, 2006 | Reply

    que??! eso no dice nada necesitamos el codigo de como quedaria, no somos programadores si lo fueramos no estariamos preguntando

  20. By pablo on Oct 5, 2006 | Reply

    Hola necesito ayuda yo estoy haciendo una pagina en flash y a un boton quiero agregarle un lick para que abra una ventana nueva bueno espero que me puedan ayudar dejo mi mail para que me manden gracias

  21. By Erick on Nov 21, 2006 | Reply

    Pablo me salvaste, esa etiqueta era lo q me faltaba para poder comunicar mi swf con mi javascript. gracias brother

  22. By Gustavo. Castro on Dec 27, 2006 | Reply

    Podria ser el codigo completo.

    Muchas Gracias.

    Gus

  23. By Javier Pepe on Mar 30, 2007 | Reply

    No se que haran los que dicen que no les anda, igualmente descubri buscando mas que flash mx 2004 y posteriores, publicando con la opcion “flash with FScommand” publica el html con todos los parametros que necesitas para que funcione la variable getURL, e incluye solito en el codigo el parametro “AllowScriptAcces” por defecto en SameDomain.

    esto fue lo que hice yo y me funciono
    En Flash, en el botón, escribi:

    on (press) {
    getURL(”javascript:abrime_la_ventana(’http://www.primerhermano.com’)”);
    }

    En el codigo html publicado desde flash con los valores de publicacion “Flash with FScommand” agregue mi funcion “propia” al script publicado por flash

    function abrime_la_ventana(n)
    {
    window.open(n);
    }

    el nombre de la funcion propia lo podes cambiar,(abrime_la_ventana) la funcion de java NO (window.open)

    espero que les sirva mi ejemplito IGUAL SINO FUESE POR PABLO QUE NOMBRO ALLOWSCRIPTACCES SEGUIRIA ROMPIENDOME LA CABEZA, GRACIAS PABLO.

  24. By Javier Pepe on Mar 30, 2007 | Reply

    No tendrian que tener mayores problemas siguiendo estos pequeños consejitos de un gil..:-P
    Primero configurar la publicacion de esta manera.CTRL+SHIFT+F12

    LA PELICULA SETEARLA EN FLASH 6 (la mayoria de los usuarios tiene seguro flash 6) y si entro a una pagina y me pide la ultima version de flash que pesa 15 mb y navego con modem no la bajo (por ser una tortura)

    EL HTML SETEARLO A “flashwithFSCOMMAND” EN LA OPCION “TEMPLATE” DE LA PUBLICACION HTML, es una opcion de flash mx y posteriores, de esta manera publica el codigo html ya con los valores para crossbrowser, como el codigo vbscript de IE y netscape 4 ,

    es Importante que en el boton de su pelicula que quieran utilizar para llamar una URL ponga en las acciones del boton (actions) este argumento

    on (press) {
    getURL(”javascript:abrime_la_ventana(’http://www.lo-que-quieran-abrir.com’)”);
    }

    Uan vez q hicieron esto editen el codigo html que publicaron con los valores que indique al principio (OJO tienen que publicar el HTML DESPUES de insertar el valor anteriror “on (press) bla bla bla…” en su boton.
    ahora despues de la etiqueta y antes de inserten la funcion a la que estamos llamando desde la peli, en este caso “abrime_la_ventana” de la siguiente forma:

    function abrir_ventana(n)
    {
    window.open(n);
    }

    busquen en el codigo el parametro “allowScriptAcces” dentro de las etiquetas y
    Y modifiquen el valor “sameDomain” por” always”

    ESO ES TODO, ABRAN SU PAGINA HTML EDITADA, EN IE 6+ NO SE OLVIDEN QUE NO VA A ANDAR EN FIREFOX …..
    GENTE, SALUDOS DESDE USHUAIA ESPERO LES SIRVA …dudas rootsco@gmail.com

  25. By Javier Pepe on Mar 30, 2007 | Reply

    las dos primeras etiquetas que hago referencia son scriptlanguage=”JavaScript” y /script
    las segundas son objectclassid /object
    no aparecieron porque bloquean el codigo html en los mensajes

  26. By javierotra vez on Mar 30, 2007 | Reply

    SOLUCION FIREFOX!!
    como la mayoria de los que incrustamos una peli en un html lo hacemos porque es una intro o un form que llama a otro archivo .htm dentro del mismo directorio (por ejemplo la raiz del hosting) en el get url usamos el nombre de archivo de esa pagina, el mozila traza rutas absolutas no relativas por eso no encuentra los archivos y devuelve un error o no hace nada en local u online. Aca les dejo el codigo que deben usar en las acciones del objeto que linka el html desde la pelicula, para que funcione tanto en IE 6+ como en FIREFOX. 1.04+

    //codigo
    on (press) {
    poslastslash = this._url.lastIndexOf(”\\”);
    if (poslastslash == -1) {
    poslastslash = this._url.lastIndexOf(”/”);
    }
    folderurl = this._url.substr(0, poslastslash+1);
    poscolon = folderurl.indexOf(”|”);
    if (poscolon-1) {
    folderurlstart = folderurl.substr(0, poscolon);
    folderurlend = folderurl.substr(poscolon+1);
    folderurl = folderurlstart+”:”+folderurlend;
    }
    targeturl = folderurl+”NOMBRE_DE_SU_ARCHIVO.html”;
    getURL(targeturl, “_blank”);
    }
    //fin de codigo

    Lo que hace es capturar la ruta absoluta de la película flash
    (con _url) y tratar la cadena devuelta antes de pasarla al getUrl.
    por ejemplo para utilizar un boton que linkee a index.php desde su pelicula solo tienen que cambiar NOMBRE_DE_SU_ARCHIVO.html por INDEX.PHP (o el nombre de su archivo) y colocar ese unico codigo dentro de las acciones del boton de la pelicula.
    Saludos

  27. By Tavo on Jul 25, 2007 | Reply

    Amigos… Muchas gracias a Pablo y a Javier Pepe (y a todos los que colaboran con esta iniciativa).

    En mi caso, al menos, la inclusión del parámetro

    param name=allowScriptAccess value=always

    solucionó mi problema (un gran problema, por cierto).

    Saludos cordiales a todos

    Tavo

    (Y recuerden: Desde el punto de vista de las estadísticas, si una persona gana US$1.000 y otra no gana nada, cada una ganó US$500.)

  28. By Gusbat on Oct 31, 2007 | Reply

    Hola podran poner algun ejemplo de un pop-up en Flash CS3?.
    Gracias!

Post a Comment