rss twitter

SharedObject 101

Hallo allerseits,
ich habe vorhin meinem Auszubildenden erklärt, wie SharedObjects funktionieren und wie er seine Idee (dazu gleich) am besten umsetzen kann. Es geht darum, dass ein Kunde einen Header in Flash hat. Wenn man das erste mal auf die Seite kommt, soll eine frenzy Animation ablaufen, die kurz das Firmenprofil erzählt und eigentlich viel zu lang ist. Wenn man sich die einmal angeschaut hat, soll ein Cookie gesetzt werden, damit man sich bei einem erneuten Aufruf der Seite nicht das ganze noch einmal anschauen muss.

SharedObjects sind die Cookies von Flash. Abgesehen davon, dass sie schrecklich schwierig zu löschen sind (nämlich nicht über die browsereigene Funktion, sondern eigtl. nur per Hand), sind sie super leicht zu schreiben und auszulesen. Es gibt im Wesentlichen nur 3-4 wichtige Methoden, um ein SharedObject zu steuern. Für den folgenden Artikel lege ich übrigens jedem unsere Debug-Klasse ans Herz, mit der sich Objekte ohne weiteres komplett tracen lassen. Einfach zu eurer .fla ins Verzeichnis legen und es funktioniert wie in meinen Beispielen.

SharedObject anlegen & auslesen

Ersteinmal muss man sich ein SharedObject-Objekt instanzieren, welches uns als Referenz für alle weiteren Methoden (schreiben, lesen, löschen) dient. Dieses Objekt "verknüpfen" wir dann mit einem SharedObject, welches der Client auf seinem PC/Mac hat, bzw. wir erstellen wollen. Haben wir das gemacht, könnten wir direkt die Daten auslesen.

Actionscript:
  1. var sharedObject:SharedObject;
  2. sharedObject = SharedObject.getLocal('beautifycode', "/", false);
  3.  
  4. Debug.dump(sharedObject.data); // gibt "" aus

Es wird also ein Objekt namens sharedObject instanziert. Diesem weisen wir mit der SharedObject eigenen Funktion getLocal() die Daten aus einem SharedObject namens "beautifycode" zu, welches nicht verschachtelt ist (es lassen sich z.B. für eine Seite mehrere SharedObjects schreiben - da bietet es sich an, diese mit der Domain zu verschachteln) und nicht für sichere Verbindungen benötigt wird - das wird durch "/" und "false" angegeben. Da wir noch nichts in dieses SharedObject geschrieben haben, wird unser dump auch nichts zurückliefern.

Daten ins SharedObject schreiben

Um Daten in ein SharedObject zu schreiben müssen wir uns, wie immer, ersteinmal eine Referenz basteln, das lokale SharedObject "verknüpfen" (hat dafür jemand mal ein passenderes Wort? :)) und dann können wir darin Daten speichern und auslesen.

Actionscript:
  1. var sharedObject:SharedObject;
  2. sharedObject = SharedObject.getLocal('beautifycode', "/", false);
  3.  
  4. sharedObject.data["userName"] = "marvin";
  5. sharedObject.data["age"] = 24;
  6. sharedObject.flush();

Das SharedObject bringt ein Data-Objekt mit sich, in dem alles gespeichert wird. Wir greifen also darauf zu und geben dem Objekt zwei Eigenschaften, nämlich z.B. "userName" und "age". Durch die Methode flush() wird das Data-Objekt auf dem PC/Mac geschrieben. Also: SharedObject instanzieren, "lokalisieren" (schon besser..), etwas zuweisen, flushen. Würden wir nun das Data-Objekt dumpen, sähe es wie folgt aus:

Actionscript:
  1. Debug.dump(sharedObject.data);
  2. // userName: marvin
  3. // age: 24

Und schon haben wir auf dem PC/Mac des Besitzers ein Cookie gesetzt.

SharedObject löschen

Um ein SharedObject komplett zu leeren, gibt es natürlich auch eine Methode, die clear() heißt:

Actionscript:
  1. var sharedObject:SharedObject;
  2. sharedObject = SharedObject.getLocal('beautifycode', "/", false);
  3.  
  4. sharedObject.clear();

Konkretes Beispiel

Im oben erwähnten Beispiel würde mein Azubi also nun nach Ablauf der Animation ein SharedObject erstellen und z.B. die Eigenschaft "hasSeen" im Data-Objekt auf true setzen. Direkt am Anfang der SWF würde er abfragen, ob diese Eigenschaft gesetzt ist, falls nicht: Animation abspielen, falls schon: Alternativcontent darstellen. Mit clear() könnte er dann dieses Cookie wieder löschen, falls der User das möchte.

SharedObject und Private Browsing

Nick Weschkalnies hat mich auf die Neuerung im Behandeln von SharedObjects im Flash Player 10.1 erinnert. Seit dieser Version wird "echtes" Private Browsing unterstützt, zumindest was die flasheigenen Cookies angeht. Ruft ein Besucher eine SWF auf, die ein SharedObject schreiben will, so wird es im Private Browsing Modus lediglich in den Arbeitsspeicher geschrieben. Desweiteren kann ein bereits im normalen Modus gesetztes SharedObject nicht im privaten gelesen werden.

So, ich hoffe, es hilft noch dem einen oder anderen weiter :)

12 Antworten zu “SharedObject 101”

  1. Flashforum sagt:

    [...] SharedObjects für jedermann.. [...]

  2. Ja sehr gut … und seit dem Flash-Player 10, sollte man auch darauf achten, dass SharedObjects zum Zeitpunkt X existieren. Stichwort: “Private Browsing” im Flash Player 10 – hast Du deinem Azubi sicher auch erklärt?! Nicht? Na, dann weißte jetzt ja Bescheid.
    ‘Nichts leichter als das’.

  3. Marvin Blase sagt:

    tja, wenn du das gerade mal etwas erläutern könntest, könnte ich das eventuell machen, jau. meinst du etwa, dass bei 10.1 keine SOs im private browsing gesetzt / gelesen werden können, bzw. nur aus dem ram? in dem fall muss der besucher halt die animation nochmal sehen, da das data-object nix liefert. soweit ich weiß wird aber kein laufzeit-fehler geworfen. wieso also so einen seltsamen unterton? :) ich werd´s aber im beitrag mal nachtragen.

  4. Stefan Nielke sagt:

    Also ich finde, der Artikel beschreibt alles, was man wissen muss. Danke!

  5. Nick Weschkalnies sagt:

    Ja, das meinte ich. Ich fand deinen (Unter)ton bzgl. deines Azubis (wär ich dein Azubi, wär ich von meinem Chef sehr angetan (Ironie)) ziemlich unpassend. Wie man in den Wald …

  6. Marvin Blase sagt:

    achso – na, der sitzt neben mir und hat den artikel beim schreiben begleitet. wir sind eher eine kleine familie hier, ursprünglich sollte ich ihn meinen “padawan” oder “imp” nennen, aber das wäre noch komischer gekommen, dachte ich. also es war kein anmaßender unterton meinerseits gewollt. :)

  7. Nick Weschkalnies sagt:

    Ok, dann entschuldige ich mich für meine Fußnoten. Für mich kam das wirklich so rüber.

  8. Ja, das meinte ich. Ich fand deinen (Unter)ton bzgl. deines Azubis (wär ich dein Azubi, wär ich von meinem Chef sehr angetan (Ironie)) ziemlich unpassend. Wie man in den Wald …

  9. An impressive share, I just given this onto a colleague who was doing just a little analysis on this. And he in actual fact purchased me breakfast because I discovered it for him.. smile. So let me reword that: Thnx for the deal with! However yeah Thnkx for spending the time to discuss this, I feel strongly about it and love reading more on this topic. If potential, as you become expertise, would you thoughts updating your weblog with extra details? It is extremely useful for me. Massive thumb up for this weblog publish!

  10. Mark sagt:

    Guter Artikel! SharedObjects sind eine gute und wertvolle Alternative zu Cookies, da Schnittstellen zu PHP / Javascript nicht notwendig sind und dennoch personalisierte Speicherungen möglich sind.

    Viele Grüße

    Mark

  11. Pozdrawiam :) z Janikowa:)

  12. Origlwdu sagt:

    russell simmons pictures,

Kommentar hinterlassen

Powered by WordPress | Free T-Mobile Phones for Sale | Thanks to Palm Pre Blog, Video Game Music and Get Six Pack Abs