Pergunta

Eu estou olhando para valores de cookies garra para o mesmo domínio dentro de um filme do Flash. Isso é possível?

Vamos ver eu deixar um usuário definir uma variável foo e eu armazená-lo usando qualquer linguagem de programação web. I pode acessá-lo facilmente através dessa linguagem, mas eu gostaria de acessá-lo através do filme do Flash sem passá-la em via de imprimi-lo dentro da página HTML.

Foi útil?

Solução

Se você quiser apenas para armazenar e recuperar dados, você provavelmente vai querer usar a classe SharedObject. Veja o Adobe referência SharedObject para mais detalhes sobre isso.

Se você quiser acessar os cookies HTTP, você vai precisar usar ExternalInterface para falar com javascript. A forma como fazemos isso aqui é ter uma classe auxiliar chamada 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);
    }
}

Você precisa ter certeza de que você habilitar o javascript usando o parâmetro 'allowScriptAccess' em seu objeto flash.

Em seguida, você precisa criar um par de funções javascript, GetCookie e setCookie, da seguinte forma (com agradecimentos 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();
        }
    }
}

Depois de ter HTTPCookies.as em seu projeto de flash, e HTTPCookies.js carregados a partir de sua página web, você deve ser capaz de chamar GetCookie e setCookie de dentro do seu filme flash para obter ou definir cookies HTTP.

Isso só vai trabalho para valores muito simples - strings ou números -. Mas para algo mais complicado que você realmente deve estar usando SharedObject

Outras dicas

Eu acredito objetos flash têm funções acessíveis através de javascript, por isso, se não há nenhuma maneira mais fácil, você poderia pelo uso menos um javascript onload manipulador e passar document.cookie em seu aplicativo Flash a partir do exterior.

Mais informações aqui: http://www.permadi.com/tutorial/flashjscommand/

Você pode ler e biscoitos escrita (objeto compartilhado local) a partir de flash. Flash cookies são armazenados em seu PC dentro de um diretório com o nome do seu domínio. Esses diretórios estão localizados em:

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

Este artigo da Adobe é um bom começo.

Alguns shows Googling que pode ser feito usando consulta cordas :

Para aplicações web, você pode passar valores para swf por parâmetros de URL, e (Com ação de script swf dentro) save -los para a caixa de areia.

biscoitos estão disponíveis para javascript através document.cookie - tente usar getURL do flash para chamar uma função javascript

.

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

método GetCookie em HTTPCookies.as deve usar declaração "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);    
  }
}

Eu sou 10 anos mais tarde. Se você pode incorporar os dados que você precisa na página, que é 10 vezes mais fáceis de pegar.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top