Nuestra ración de infierno: Flash 9 standalone y getURL

Como ya hemos dicho en ocasiones, el nombre del blog tiene un por qué y no es otro que el de esas bonitas jugarretas que te encuentras cuando trabajas con nuestros queridos amigos los ordenadores. Concretamente en este caso, con flash.

Hoy por la mañana, he tenido el privilegio de experimentar una experiencia enriquecedora, que me ha hecho ver bonitas luces de colores, y quiero compartirla con vosotros.

El caso es que estabamos desarrollando un CD con Flash CS3, y se dió (cosa realmente extraña) el caso de necesitar abrir un PDF incluido en dicho CD. Para evitar tirar de fscommand, y tener que preparar un exe por cada archivo, decidimos usar getURL.

La cosa no funciobaba. Yo me acordaba de los amigos de Adobe, que cada versión de player que sacan, se dedican a hurgar en las restricciones de seguridad y la comunicación de los standalone con el resto de la humanidad. No tocaaaaaaarrrr, no tocaaaarrrr. Dejarlo ya por Dios!

La cosa es que por alguna razón que se escapaba a mi alcance, no me permitía abrir un PDF con getURL desde la aplicación. Abría el navegador (en este momento firefox), pero no cargaba nada en su interior. Visto el tema, y tras probar mil combinaciones de rutas, posibilidades, etc, me encomiendo a google (recomendable siempre), y cual es mi sorpresa al econtrarme multitud de post sobre la cantidad de problemas que ha traido consigo el player 9 con respecto a fscommand y getURL. Y encima, son problemas realmente curiosos.

Que si pongo 2 fscommand en el mismo fotograma seguidos, uno deja de funcionar!!! que si pongo 2 getURL seguidos solo me lanza el segundo…. que si en firefox no abre, pero en IE si!! ¿pero qué es esto?.

Por lo que se ve el player 9 ve diferencias entre esto:

fscommand("fullScreen", "TRUE");

y esto otro:

fscommand("fullScreen","true");

Nuestro problema era firefox que por lo que se vé tiene un bug “a medias” que hace que nuestra ruta relativa sea parseada a una ruta absoluta y en ese proceso se añade algun caracter indeseado (el famoso caracter de pipe “|”), quedando algo similar a esto en la traducción de la llamada:

firefox -url “file:///c|docdocumento.pdf”

Solución: Yo quiero a Paul Robertson, que además da una fantástica explicación del problema soluciones en AS2, AS3 y enlaces a otros problemas relacionados. Pedazzzo de entrada de blog.

Principalmente pasa por emplear este código para que la llamada se produzca con la ruta completa, y así firefox no haga de las suyas. A todo esto, en IE funciona correctamente.

var swfUrl:String = _root._url;
var lastSlashIndex:Number = swfUrl.lastIndexOf("/");
var pipeIndex:Number = swfUrl.indexOf("|");
var baseUrl:String;
if (pipeIndex >= 0)
{
baseUrl = swfUrl.substring(0, pipeIndex);
baseUrl += ":";
}
else
{
baseUrl = "";
}
baseUrl += swfUrl.substring(pipeIndex + 1, lastSlashIndex + 1);

myButton.onRelease = function()
{
var targetUrl:String = baseUrl + "doc/documento.pdf";
getURL(targetUrl, "_blank");
};

Pero como no me fio de mi memoria, me pongo también éste otro enlace y éste otro más, donde la gente de Northcode hace un gran aporte a las futuras roturas de pelotas de los flasheros.

Yo ante estas cosas siempre me pregunto quién ha sido el primero de todos, el “bravido” que ha dado con la solución…