Domanda

Sto cercando di acquisire i valori dei cookie per lo stesso dominio all'interno di un filmato Flash. È possibile?

Vediamo che lascio che un utente imposti una variabile foo e la memorizzi usando qualsiasi linguaggio di programmazione web. Posso accedervi facilmente tramite quella lingua, ma vorrei accedervi tramite il filmato Flash senza passarlo tramite la stampa all'interno della pagina HTML.

È stato utile?

Soluzione

Se si desidera solo archiviare e recuperare dati, probabilmente si desidera utilizzare la classe SharedObject. Vedi Riferimento SharedObject di Adobe per maggiori dettagli.

Se si desidera accedere ai cookie HTTP, è necessario utilizzare ExternalInterface per parlare con JavaScript. Il modo in cui lo facciamo qui è di avere una classe di supporto chiamata 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);
    }
}

Devi assicurarti di abilitare JavaScript utilizzando il parametro 'allowScriptAccess' nell'oggetto flash.

Quindi devi creare una coppia di funzioni javascript, getCookie e setCookie, come segue (grazie 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();
        }
    }
}

Dopo aver HTTPCookies.as nel tuo progetto flash e aver caricato HTTPCookies.js dalla tua pagina web, dovresti essere in grado di chiamare getCookie e setCookie dal tuo filmato flash per ottenere o impostare i cookie HTTP.

Funzionerà solo con valori molto semplici - stringhe o numeri - ma per qualcosa di più complicato dovresti davvero usare SharedObject.

Altri suggerimenti

Credo che gli oggetti Flash abbiano funzioni accessibili tramite javascript, quindi se non c'è modo più semplice, potresti almeno usare un gestore di onload javascript e passare document.cookie nella tua app flash dall'esterno.

Maggiori informazioni qui: http://www.permadi.com/tutorial/flashjscommand/

Puoi leggere e scrivere cookie (Local Shared Object) da Flash. I cookie flash sono memorizzati sul tuo PC in una directory con il nome del tuo dominio. Tali directory si trovano in:

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

Questo articolo di Adobe è un buon inizio.

Alcuni googling mostrano che è possibile farlo utilizzando stringhe di query :

  

Per le applicazioni web, puoi passare   valori da scambiare con i parametri url e   (con script di azioni all'interno di swf) salva   li nella sandbox.

I cookie sono disponibili per javascript tramite document.cookie - prova a utilizzare getURL di flash per chiamare una funzione javascript.

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

Il metodo getCookie in HTTPCookies.as dovrebbe usare " return " comunicato.

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);    
  }
}

Sono in ritardo di 10 anni. Se puoi incorporare i dati di cui hai bisogno nella pagina, è 10 volte più facile da catturare.

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(''));

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top