Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-02-2005, 23:14   #1 (permalink)
!diot
 
Benutzerbild von Fuery3302
 
Registriert seit: Aug 2003
Ort: PunkRockCity-Linz
Beiträge: 95
[TUT] SharedObject, Shared-Doc's, Flash-Cookies

Hi Leute.
Da ich immer wieder auf Beiträge stoße, indenen gefragt wird ob man mit Flash speichern kann, hab
ich mir gedacht ich fasse mal ein bischen was über das SharedObject zusammen.


...::: SharedObject, Shared-Docs, Flash-Cookies :::...

SharedObject-Objekt ermöglicht mit AS, Daten lokal zu speichern und wieder abzurufen. Das kann oft
sehr nützlich sein bei zB. Online-Spielen, User-Login, Begrüßungsname einer Hompage oder auch bei
Projekten ohne PHP bzw. XML, wie "Notizbuch" ... kleine Sachen halt


Konstruktor:
Zitat:
Es gibt keinen Konstruktor.
Wird mit getLocal() erzeugt (Siehe Methoden).

var mySharedObj = SharedObject.getLocal("meineDaten")
Eigenschaften:

Zitat:
SharedObject.data

... ist ein Container fur die Daten die gespeichert oder abgerufen werden sollen.

Es sind alle primitiven Datentypen erlaubt -> number, string, boolean, ...
Es können auch ganze Arrays oder Objekte (benutzerdefinierte Klassen, XML und das Date-Object) gespeichert werden.
Leider könne keine anderen eingebuate Klassen und Objekte (MovieClip oder Function) gespeichert werden.

Zuweisung:

mySharedObj.data.myDate = new Date(); // Richtig! wird gespeichert

mySharedObj.myDate = new Date(); // FALSCH! wird nicht gespeichert
mySharedObj.data = new Date(); // FALSCH! wird ignoriert

Diese daten können mit delete wieder gelöscht werden.

delete mySharedObj.data.myDate;

Es können maximal 100 KByte pro Domain gespeichert werden. Sollte aber ausreichen.
Methoden:
Zitat:
SharedObject.getLocal([objectname])
SharedObject.getLocal([objectname],[pfad])

[objectname] - Ist ein String. Kann "/" enthalten.
Aber folgende Sonderzeichen nicht: ~%&\;:"',><?#
[pfad] - Ein String mit einem Teil des lokalen Pfads zu der *.sol-Datei,welche auf dem Client-Computer gespeichert ist.

Rückgabe: Liefert die Referenz auf die angegebene lokale Instanz von SharedObject.
Wenn [pfad] falsch ist wird null zurückgegeben.

Mit getLocal() wird ein Lokales SharedObject erzeugt oder abgerufen. Die *.sol-Datei ist unter

"C:\Dukumente und Einstellungen\Benutzername\Anwendungsdaten\Macrome dia\Flash Player\Domain\filname.swf\[objectname].sol"

oder

"C:\Dukumente und Einstellungen\Benutzername\Anwendungsdaten\Macrome dia\Flash
Player\Domain\[pfad]\filname.swf\[objectname].sol"

gespeichert.

Diese Datei enthält die erforderlichen Daten, um das SharedObject so abzurufen, wie es zuletzt gespeichert wurde. Wird eine passende *.sol-Datei gefunden, gibt getLocal() ein lokales SharedObject zurück, dessen data-Eigenschaft die Werte hat, welche zuletzt gespeichert wurden.
Wird keine passende *.sol-Datei gefunden, erzeugt und liefert getLocal() ein neues SharedObject namens [objectname]. Ist der angegebene [pfad] ungültig liefert die Methode den Wert null und zeigt dadurch das Scheitern der Anwendung an.
[pfad] wird meistens benützt wenn ein Film auf eine oder mehrere *.sol-Dateien zugreifen müssen.
Filme die auf einem lokalem System laufen, werden der Domain "localhost" zugewiesen.
Zitat:
SharedObject.flush()
SharedObject.flush([minimumDiskSpace])

[minimumDiskSpace] - Ein Integer, der angibt wieviel lokaler Speicherplatz (Bytes)
für die aktuelle Domain angefordert wird. So kann man mehr Speicherplatz anfordern als man eigentlich benötigt. Wird [minimumDiskSpace] weggelassen, wird soviel Platz angefordert wie nötig ist.

Rückgabe: Es wird der String-Wert "pending" zurückgegeben wenn das Speichern mehr Platz erfordert.
Sonst Boolescher-Wert: true bei Erfolg und false wenn das Speichern nicht erlaubt ist.

Die Methode flush() speichert die Eigenschaften von SharedObject.data in eine *.sol-Datei in den oben gezeigten Pfad.
Zitat:
SharedObject.getSize()

Rückgabe: Gibt die Größe des SharedObject in Bytes zurück.

getSize() liefert die Gesamtgröße aller Eigenschaften von mySharedObject.data.
Je mehr Eigenschaften mySharedObject.data hat umso länger dauert die Ausführung von getSize().

Was soll man da noch sagen?
Event-Handler:
Zitat:
SharedObject.onStatus()

[infoObject] - Ein Objekt, dessen Eigenschaften [code] und [level] die Statusmeldung speichert.

onStatus() tritt nur ein wenn mySharedObject.flush() aufgerufen wurde und der lokale Speicherplatz zu klein ist. Ist dies der Fall zeigt Flash ein Dialogfeld für die Einstellungen an. Der User wird aufgefordert den Speicherplatz für die aktuelle Domain zu vergrößern. Sobald er sich entschieden hat wird onStatus() aufgerufen und bekommt ein [infoObject] übergeben um anzuzeigen ob der Speicherplatz bereitgestellt wurde. Das [infoObject] weist die beiden Eigenschaften

[code] und [level]

auf. Diese Können folgende Werte haben:

[code]: 1. "SharedObject.Flush.Failed"
2. "SharedObject.Flush.Success"

[level]: 1. "error"
2. "status"

Wenn 1. auftritt hat der User nicht genügend Speicherplatz bewilligt.
Bei 2. wurde genügend Speicherplatz bewilligt.
Im grunde wird nur [code] benötigt.
Jetzt ein kleines Beispiel um Daten zu speichern:
PHP-Code:
 // Beispieldaten deklarieren
var myTestObj = new Object();
myTestObj.num 1234;
myTestObj.str "Ich bin ein String";
myTestObj.bol true;
myTestObj.arr = ["Thomas""Lukas""Franz""Max"];


// SharedObject wird erzeugt
var  mySharedObj SharedObject.getLocal("meineDaten")

// Funktion speichern
function speichern()
{
  
// das Test-Objekt wird nun der SharedObject.data-Eigenschaft zugewiesen
  
mySharedObj.data.myObj myTestObj;
  
  
// Größe unseres SharedObject ermitteln
  // getSize() / 1024 = KByte
  // wir geben 15 KByte dazu um nicht immer Platz fordern zu müssen.
  // muss man nicht machen
  
var myKB Math.ceilmySharedObj.getSize() / 1024)+15;
  
trace("Speicherplatz-Größe in KByte: " myKB);
  
  
// Rückgabewert von flush() und SharedObject speichern
  // myKB *1024 um wieder auf Byte zu kommen
  
var tmp mySharedObj.flush(myKB 1024);
  
  
// wenn die Rückgabe von flush() ...
  
if (tmp)
  {
    
//... true ist: erfolgreich
    
trace("Speichern erfolgreich");
  }else if ( 
tmp == "pending")
  {
    
//... "pending" ist: Flash fordert mehr speicher
    
trace("Es wird mehr Speicherplatz benötigt");
  }else if(!
tmp)
  {
    
//... false ist: Ist das Speichern nicht erlaubt
    
trace("Keine Speicherberechtigung! Bitte 'Never' unter lokale Einstellungen demarkieren.");
    
// öffnen des Dialogfensters
    
System.showSettings(1);
  }


  
// jetzt der Event-Handler onStatus()
  // wird aufgerufen wenn flush() "pending" zurückgibt
  // onStatus() deklarieren und infoObject nicht vergessen.
  
mySharedObj.onStatus = function(infoObject)
  {
    
// Hat User genügend Speicherplatz zur Verfügung gestellt?
    
if (infoObject.code == "SharedObject.Flush.Success")
    {
      
//User hat genügend Speicherplatz zur Verfügung gestellt
      
trace("Genügend Speicherplatz erhalten. Speichern erfolgreich");
    }else if (
infoObject.code == "SharedObject.Flush.Failed")
    {
      
//User hat nicht genügendSpeicherplatz zur Verfügung gestellt
      
trace("Nicht genügend Speicherplatz erhalten. Speichern Fehlgeschlagen");
    }
  }

Laden geht ganz einfach so:
PHP-Code:
// SharedObject deklarieren
var  mySharedObj SharedObject.getLocal("meineDaten")

// abfragen ob erfolgreich geladen.

if ( !(mySharedObj == null) )
{
  
// deinem Object die geladenen Daten zuweisen
  
_global.meineGeladenenDaten mySharedObj.data;

Ich hoffe das kann wer gebrauchen.
Wenn ich wo falsch liege oder kompletten Stuss geschrieben habe. BITTE MELDEN.
Auch Rechtschreibfehler.

lg schönes Wochenende schon mal

Füry
__________________
Incubus rocks

Geändert von Fuery3302 (03-02-2005 um 23:28 Uhr)
Fuery3302 ist offline   Mit Zitat antworten
Alt 03-02-2005, 23:53   #2 (permalink)
Bizarre Animator
 
Registriert seit: Sep 2001
Ort: Hölle/Saale
Beiträge: 219
Hallo Füry

danke für die schöne Zusammenfassung!

Eine Frage: Können Nutzer das SharedObject irgendwie verbieten - so wie das mit Cookies geht. Das wäre ärgerlich weil SharedObject echt nützlich ist.

Henry
www.jumpingjokes.com
jumpingjokes ist offline   Mit Zitat antworten
Alt 04-02-2005, 15:37   #3 (permalink)
!diot
 
Benutzerbild von Fuery3302
 
Registriert seit: Aug 2003
Ort: PunkRockCity-Linz
Beiträge: 95
leider leider

Ja der Nutzer kann das SharedObject verbieten. In den Einstellunen des Flash-Players. sieht ungefähr so aus:
Einstellungen->

Lokaler Speicher:
Wie viele Informationen darf "Domain" auf ihren Computer Speichern?
Anzeige des Speichervolumens. Standard ist 100KB.

darunter eine Checkbox wo "Nie" daneben steht. Wenn diese markiert ist können KEINE Daten gespeichert werden.
Die Methode flush() gibt dann false zurück. schon vergessen?

lg
__________________
Incubus rocks
Fuery3302 ist offline   Mit Zitat antworten
Alt 04-02-2005, 19:36   #4 (permalink)
Bizarre Animator
 
Registriert seit: Sep 2001
Ort: Hölle/Saale
Beiträge: 219
Hi

ich hatte das mit dem Speicher für [Domain] schon verstanden. Wäre dann aber nur für besuchte URLs.

Es gibt aber aber auch eine Einstellung für den globalen Speicher:

http://www.macromedia.com/support/do...manager03.html

Wenn man den auf Null setzt ist wohl Ruhe mit SharedObject. Eine Einstellung, die von mir aus gerne so versteckt bleiben darf. Hatte mir noch nicht die Mühe gemacht danach zu suchen...

Schönes Wochenende

Henry
www.jumpingjokes.com
jumpingjokes ist offline   Mit Zitat antworten
Alt 18-02-2005, 12:13   #5 (permalink)
loveandhateflash
 
Registriert seit: Oct 2001
Ort: ffm
Beiträge: 207
kann denn der pfad auch eine ip-adresse eines anderen rechners in einem heimnetz beinhalten? also für eine art intranetanwendung, wobei ich mit flash in eine sharedobject speichere und die player der anderen rechner diese datei nur auslesen?
zungenbrecher ist offline   Mit Zitat antworten
Alt 18-02-2005, 16:39   #6 (permalink)
AAI
 
Benutzerbild von AAI
 
Registriert seit: May 2004
Beiträge: 327
sol: die Sonne

So ein <sol> ist eine feine Sache.
Doch hat es Eigenheiten:

1. lade <sol>.
2. verändere daten.
3. speichere <sol> mit flush

soweit kein Problem,
wenn da nicht die folgende Serie das gleiche tät.

1. lade <sol>.
2. verändere daten.
3. schließe Datei.

dies ist unvorteilhaft, wenn bei <Punkt2> ein Fehler unterlaufen ist.


Wie ist dem entgegenzukommen?

Lösung A:
Nach dem laden der Daten ein backup dieser machen und mit denen arbeiten.


Gibt es eine Lösung B, die diesen Aufwand umgeht indem sie das
automatische Speichern beim Schließen der Datei unterbindet?
AAI ist offline   Mit Zitat antworten
Alt 11-09-2006, 17:41   #7 (permalink)
FlashFreak ;-)
 
Registriert seit: Jun 2002
Ort: Berlin
Beiträge: 102
Post

mir fehlen hier noch drei sachen die ich selber auch noch suche...:


1. Wie finde ich die anzahl der data-Objekte heraus?

Angenommen ich habe :
mysharedObj.data.text1 = new String();
mysharedObj.data.text1 = "das ist text1";

mysharedObj.data.text2 = new String();
mysharedObj.data.text2 = "und das der zweite text";

gibts nicht sowas ähnliches wie mysharedObj.length ?? Woher weiss ich dass das ding 2 objekte hat.


2. Wie finde ich die objektnamen heraus? Also dass das erste "text1" heisst und das zweite "text2"


3. wie kann ich dynamisch (!) objekte anlegen.
z.b. ich will 5 objekte anlegen die alle heissen sollen "text" + zähler

for(var i=0; i<=5; i++){
mysharedObj.data.text + i= new String(); //KLAPPT NICHT
mysharedObj.data.text + i= "Mein " + i + "ter Text"; //KLAPPT NICHT
Blubbie ist offline   Mit Zitat antworten
Alt 11-09-2006, 21:16   #8 (permalink)
zimmer 101
 
Benutzerbild von ricobeck
 
Registriert seit: Jul 2003
Ort: LE
Beiträge: 1.581
zu 1.) und 2.)
PHP-Code:
var i:Number=0;
for (var 
prop in meineGeladenenDaten.myObj) {
    
i++;
    
trace("sol_data: "+prop+": "+meineGeladenenDaten.myObj[prop]);
}
trace(i); 
__________________
Illogical comparison with NaN. Any comparison operation involving NaN will evaluate to false because NaN != NaN.
ricobeck.de
ricobeck ist offline   Mit Zitat antworten
Alt 24-09-2006, 21:48   #9 (permalink)
---
 
Benutzerbild von LeBensch
 
Registriert seit: Jan 2002
Ort: Baden-Baden
Beiträge: 172
Hallo,
ne Frage hätte ich da noch zu dem Daten-Speichern-Beispiel von Fuery3302.
Und zwar an der Stelle, wo der Rückgabewert des flush() überprüft wird:
PHP-Code:
// wenn die Rückgabe von flush() ...
  
if (tmp)
  {
    
//... true ist: erfolgreich
    
trace("Speichern erfolgreich");
  }else if ( 
tmp == "pending")
  {
    
//... "pending" ist: Flash fordert mehr speicher
    
trace("Es wird mehr Speicherplatz benötigt");
  }else if(!
tmp)
  {
    
//... false ist: Ist das Speichern nicht erlaubt
    
trace("Keine Speicherberechtigung! Bitte 'Never' unter lokale Einstellungen demarkieren.");
    
// öffnen des Dialogfensters
    
System.showSettings(1);
  } 
Kann es sein, dass flush() auch true zurückgibt, wenn das Häkchen bei "Nie" nicht gesetzt, der Schieberegler aber ganz links auf "keine" (...Information darf gespeichert werden) steht?! Das wäre doch ein kleiner Bug, oder?

Grüßles
LeBensch
__________________
Es gibt nichts gutes, außer man tut es
--
Wenn man keine Ahnung hat: Einfach mal die Fresse halten!
--
Helga: Hägar, du hörst immer nur was du hören willst. Du bist der perfekte Ignorant!
Hägar: Perfekt? Meinst du wirklich?
--
Die Dinge im Leben sind nicht nur schwarz oder weiß. Sie existieren in einem Kontinuum von Graustufen und diese sind im besten Falle auch noch bunt!
LeBensch ist offline   Mit Zitat antworten
Alt 21-11-2006, 11:31   #10 (permalink)
ozzmana
 
Registriert seit: Apr 2004
Beiträge: 1
Endlich mal ein Tutorial, dass es auf den Punkt gebracht hat und übersichtlich strukturiert ist. Danke. Jetzt hab ich´s auch endlich kapiert, welcher Status wofür ist und wie und wann das Flash-Cookie ausgelesen wird.

Interessant als Anmerkung vielleicht noch:
- .sol Dateien auf der Festplatte lassen sich zwar abändern, danach
werden sie aber vom Flash-Film ingnoriert. Somit relativ standhaft gegen
Manipulation

Besten Dank nochmal ...
Ozzman ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele