Pregunta

Estoy buscando obtener valores de cookies para el mismo dominio dentro de una película Flash.es posible?

Veamos, dejo 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 imprimiéndola dentro de la página HTML.

¿Fue útil?

Solución

Si solo desea almacenar y recuperar datos, probablemente desee utilizar la clase SharedObject.Ver Referencia de objetos compartidos de Adobe para más detalles al respecto.

Si desea acceder a las cookies HTTP, deberá utilizar ExternalInterface para comunicarse 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);
    }
}

Debe asegurarse de habilitar JavaScript usando el parámetro 'allowScriptAccess' en su objeto flash.

Luego necesitas crear un par de funciones javascript, getCookie y setCookie, de la siguiente manera (con agradecimiento 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 HTTPCookies.as en su proyecto flash y HTTPCookies.js cargado desde su página web, debería poder llamar a getCookie y setCookie desde su película flash para obtener o configurar cookies HTTP.

Esto sólo funcionará para valores muy simples (cadenas o números), pero para algo más complicado debería utilizar SharedObject.

Otros consejos

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 podrías usar un controlador de carga de javascript y pasar document.cookie a tu aplicación flash desde el exterior.

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

Puede leer y escribir cookies (objeto compartido local) desde 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 artículo de Adobe es un buen comienzo.

Algunas búsquedas en Google muestran que se puede hacer usando cadenas de consulta:

Para aplicaciones web, puede pasar valores a SWF por parámetros de URL y (con script de acción dentro de SWF) guárdelos en el sandbox.

Las cookies están disponibles para JavaScript a través de document.cookie; intente usar getURL de Flash para llamar a una función de JavaScript.

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

El método getCookie en HTTPCookies.as debería 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);    
  }
}

Llego 10 años tarde.Si puede insertar los datos que necesita en la página, será 10 veces más fácil de obtener.

import flash.net.*

var _loader:URLLoader = new URLLoader();
var _req:URLRequest = new URLRequest('https://stackoverflow.com');
_loader.addEventListener(Event.COMPLETE, _onComplete);
_loader.load(_req);

function _onComplete(e:Event):void{
    var wantedData:RegExp = /<div class="cool-data">(.*?)</div>/ig;
    var result:Object = wantedData.exec(String(_loader.data));
    trace(result[0].split('<div class="cool-data">').join('')
                   .split('</div>').join(''));

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top