Bei der Entwicklung eines Webspiels in Flash CS5.5 bin ich auf diesen seltsamen Fehler gestoßen
Wenn das Spiel startet, werden Informationen über den Spielverlauf aus dem LSO geladen. Ich mache das jetzt schon seit Monaten so, aber aus irgendeinem Grund haben vor etwa 10 Tagen die folgende Zeile und andere ähnliche Zeilen angefangen, Ausnahmen in Chrome und Internet Explorer zu verursachen. Sie haben alle mit dem Laden eines Wörterbuchs aus einem LSO-Datenobjekt zu tun. Weiß jemand, warum dies jetzt plötzlich Probleme verursacht, obwohl es vorher gut funktioniert hat? Da mein Code und meine Kompilierungseinstellungen seit langem gleich geblieben sind, ist es möglich, dass sich in Chrome oder Internet Explorer etwas geändert hat?
während des Starts wird die LSO geladen
this.lso = SharedObject.getLocal("myLSO");
aber dann passiert diese Ausnahme:
Benutzerausnahme ausgelöst: TypeError: Fehler #1034: Type Coercion fehlgeschlagen: kann Object@1278ad19 nicht in flash.utils.Dictionary konvertieren...
die durch diese Leitung verursacht wurde:
this.game.playerHist.completionData=this.lso.data.playerHistory.completionData;
Die Lösung, die schließlich funktionierte, bestand darin, das Wörterbuch wie folgt zu klonen:
this.game.playerHist.completionData =
this.clone(this.lso.data.playerHistory.completionData);
mit dieser Funktion, die im Wesentlichen dasselbe tut, indem sie das ursprüngliche Objekt wie ein Wörterbuch behandelt (indem sie seine Schlüssel abruft), aber aus irgendeinem Grund löst sie keine Ausnahme aus:
function clone(original:Object):Dictionary {
var cloned:Dictionary= new Dictionary();
for(var key:Object in original) {
cloned[key]=original[key];
}
return cloned;
}
Seltsamerweise funktionierte das Laden eines Wörterbuchs ohne die Klon-Funktion im IE manchmal problemlos und löste nur in Chrome eine Ausnahme aus. Hat jemand eine Idee, was der Unterschied zwischen den beiden Browsern sein könnte, oder hat eine Möglichkeit, dies zu erklären?