Frage

Ich suche Cookie-Werte für die gleiche Domain innerhalb eines Flash-Films zu greifen. Ist das möglich?

Lassen Sie uns sehen, lasse ich ein Benutzer eine Variable foo gesetzt und speichere ich es jede Web-Programmiersprache. Ich kann es einfach über diese Sprache zugreifen, aber ich mag es, ohne es zu übergeben Sie Seite im HTML über den Druck in über den Flash-Film zugreifen zu können.

War es hilfreich?

Lösung

Wenn Sie wollen einfach nur Daten speichern und abrufen, möchten Sie wahrscheinlich die Shared Klasse verwenden. Siehe Adobes Shared Referenz für weitere Details davon.

Wenn Sie die HTTP-Cookies zugreifen möchten, müssen Sie ExternalInterface verwenden, um Javascript zu sprechen. Die Art, wie wir das hier tun, ist eine Hilfsklasse namens 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);
    }
}

Sie müssen sicherstellen, dass Sie aktivieren Javascript, um die 'allowScriptAccess' Parameter in Ihrem Flash-Objekt.

Dann müssen Sie ein Paar von JavaScript-Funktionen, getCookie und setCookie erstellen, wie folgt (mit Dank an 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();
        }
    }
}

Wenn Sie HTTPCookies.as in Ihrem Flash-Projekt haben, und HTTPCookies.js von Ihrer Web-Seite geladen wird, sollten Sie in der Lage sein getCookie und setCookie rufen aus Ihrem Flash-Film zu erhalten oder setzen HTTP-Cookies.

Dies wird nur für sehr einfache Werte arbeiten - Strings oder Zahlen - aber für etwas kompliziertere Sie wirklich mit Shared werden sollte

.

Andere Tipps

Ich glaube, Flash-Objekte Funktionen zugänglich über Javascript, also, wenn es kein einfacherer Weg, man könnte zumindest einen Javascript onload-Handler und document.cookie in Ihren Flash-App von außen passieren.

Weitere Informationen hier: http://www.permadi.com/tutorial/flashjscommand/

Sie können Cookies (Local Shared Object) aus dem Flash lesen und schreiben. Flash-Cookies auf Ihrem PC in einem Verzeichnis mit dem Namen Ihrer Domäne gespeichert. Diese Verzeichnisse befinden sich in:

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

Die Artikel von Adobe rel="nofollow ist ein guter Anfang.

Einige googeln zeigt, dass es durch die Verwendung Abfrage-Strings :

  

Für Web-Anwendungen können Sie passieren   Werte, die durch URL-Parameter swf, und   (Mit Action Script innerhalb SWF) speichern   sie in die Sandbox.

Cookies Javascript durch document.cookie verfügbar sind -. Versuchen Blitzes GetURL eine Javascript-Funktion aufrufen

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

getCookie Methode in HTTPCookies.as sollte "return" Anweisung verwenden.

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

Ich bin 10 Jahre zu spät. Wenn Sie die Daten einbetten können Sie auf der Seite benötigen, es ist 10-mal leichter zu greifen.

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

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top