2008-09-20 22 views
10

Estoy buscando capturar valores de cookies para el mismo dominio dentro de una película Flash. es posible?¿Cómo accedo a las cookies dentro de Flash?

Veamos Permití que un usuario establezca una variable foo y la almaceno usando cualquier lenguaje de programación web. Puedo acceder fácilmente a través de ese idioma, pero me gustaría acceder a él a través de la película Flash sin pasarla a través de la impresión en la página HTML.

Respuesta

11

Si lo que desea es almacenar y recuperar datos, es probable que desee utilizar la clase SharedObject. Vea Adobe's SharedObject reference para más detalles de eso.

Si desea acceder a las cookies HTTP, deberá usar ExternalInterface para hablar con javascript. La forma en que lo hacemos aquí es tener una clase auxiliar llamada HTTPCookies.

HTTPCookies.as:

import flash.external.ExternalInterface; 

public class HTTPCookies 
{ 
    public static function getCookie(key:String):* 
    { 
     return ExternalInterface.call("getCookie", key); 
    } 

    public static function setCookie(key:String, val:*):void 
    { 
     ExternalInterface.call("setCookie", key, val); 
    } 
} 

Se necesitan asegurarse de habilitar javascript usando el parámetro 'allowScriptAccess' en su objeto flash.

Luego hay que crear un par de funciones javascript, GetCookie y setCookie, de la siguiente manera (con gracias a quirksmode.org)

HTTPCookies.js:

function getCookie(key) 
{ 
    var cookieValue = null; 

    if (key) 
    { 
     var cookieSearch = key + "="; 

     if (document.cookie) 
     { 
      var cookieArray = document.cookie.split(";"); 
      for (var i = 0; i < cookieArray.length; i++) 
      { 
       var cookieString = cookieArray[i]; 

       // skip past leading spaces 
       while (cookieString.charAt(0) == ' ') 
       { 
        cookieString = cookieString.substr(1); 
       } 

       // extract the actual value 
       if (cookieString.indexOf(cookieSearch) == 0) 
       { 
        cookieValue = cookieString.substr(cookieSearch.length); 
       } 
      } 
     } 
    } 

    return cookieValue; 
} 

function setCookie(key, val) 
{ 
    if (key) 
    { 
     var date = new Date(); 

     if (val != null) 
     { 
      // expires in one year 
      date.setTime(date.getTime() + (365*24*60*60*1000)); 
      document.cookie = key + "=" + val + "; expires=" + date.toGMTString(); 
     } 
     else 
     { 
      // expires yesterday 
      date.setTime(date.getTime() - (24*60*60*1000)); 
      document.cookie = key + "=; expires=" + date.toGMTString(); 
     } 
    } 
} 

Una vez que tenga en su HTTPCookies.as flash project, y HTTPCookies.js cargados desde su página web, debería poder llamar a getCookie y setCookie desde su película flash para obtener o establecer cookies HTTP.

Esto solo funcionará para valores muy simples - cadenas o números - pero para algo más complicado, realmente debería usar SharedObject.

+0

¿Cómo obtiene realmente el código flash el valor devuelto de la llamada js getCookie()? No hay declaración de devolución en su código AS. ¿Debería devolver el resultado de la llamada ExternalInterface? – Herms

+0

Buen punto - arreglado. ¡Gracias! – Simon

0

Creo que los objetos flash tienen funciones accesibles a través de JavaScript, por lo que si no hay una manera más fácil, al menos puede usar un controlador onload de JavaScript y pasar document.cookie a su aplicación flash desde el exterior.

Más información aquí: http://www.permadi.com/tutorial/flashjscommand/

0

Puede leer y escribir cookies (Local Shared Object) de flash. Las cookies Flash se almacenan en su PC dentro de un directorio con el nombre de su dominio. Esos directorios se encuentran en:

[Root drive]:\Documents and Settings\[username]\Application Data\Macromedia\Flash Player\#SharedObjects\ 

Este article de Adobe es un buen comienzo.

+1

Tenga en cuenta que los objetos compartidos son * no * cookies, funcionan más o menos igual, pero SharedObjects son específicos de Flash. – grapefrukt

0

algunas google muestra que se puede hacer mediante el uso de query strings:

Para aplicaciones web, puede pasar valores a swf por parámetros de URL, y (con escritura de la acción dentro de SWF) guardar a la caja de arena.

0

las cookies están disponibles para javascript a través de document.cookie - intente usar flash's getURL para llamar a una función javascript.

getURL('javascript:document.cookie = "varname=varvalue; expires=Thu, 2 Aug 2001 20:47:11 UTC; path="');

0

método getCookie en HTTPCookies.as debe utilizar la declaración "return".

import flash.external.ExternalInterface; 
public class HTTPCookies 
{  
    public static function getCookie(key:String):* 
    { 
     return ExternalInterface.call("getCookie", key);  
    } 
    public static function setCookie(key:String, val:*):void 
    { 
     ExternalInterface.call("setCookie", key, val);  
    } 
} 
Cuestiones relacionadas