2010-07-29 2 views
2

J'ai une application flash simple qui compte sur le clic du bouton. Je le charge dans une page et un code javaScript fait des manipulations DOM pour le déplacer d'une balise div à une autre.Application Flash perdre l'état après déplacé vers un autre div par JavaScript

Problème: l'état du compte n'est pas conservé lorsque le nœud swf est déplacé d'un nœud à un autre.

Ce que je l'ai fait:

  1. je reçois simplement le nœud en utilisant la fonction javascript getElementByID et une fois que je reçois la source et les noeuds div destination, puis-je utiliser

    destinationNode.appendChild(sourceNode); //javascript 
    

Cela fonctionne bien dans Internet Explorer, mais cela ne fonctionne pas dans Chrome et Firefox.

  1. Alors j'ai essayé la bibliothèque prototype.

    node1 = $("destinationDIV"); 
    node2 = $("sourceDIV"); //keeps the swf element 
    //------------------------------------------Works | only IE 
    //node1.replace(node2); //this works, only in IE 
    node1.insert({'after':node2}); //this also works, also only in IE 
    

Malheureusement, cela ne fonctionne que dans IE, pas dans Chrome et Firefox. 3. J'ai essayé de cloner le noeud source en premier et de placer l'objet cloné dans la div destination. Comme:

var obj = Object.clone(node2); // prototype library 
node1.insert({'after':obj}); 

mais j'ai reçu une erreur. Cela dit Exception ... "Le noeud ne peut pas être inséré au point spécifié dans la hiérarchie" code: "3" ...

mon souci n'est pas cette erreur. Je suis préoccupé par le fait que la solution 1 et 2 fonctionnent dans Internet Explorer pas dans Firefox et Chrome.

Tout corps qui sait comment faire du flash se souvient de son état quand il est déplacé d'un div à un autre dans firefox, chrome, et IE ??

grâce

Répondre

1

Comme vous l'avez déjà noté, il semble que le swf soit rechargé chaque fois que vous le déplacez. Donc, vous devrez garder une trace de l'état actuel manuellement et dans le cas où il y a un rechargement à partir de là. La façon de le faire est d'utiliser un LocalSharedObject alias « Flash Cookie »:

http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/net/SharedObject.html

var my_so:SharedObject = SharedObject.getLocal("widgetState"); 
my_so.data.buttonClicks= currentClicks; 
my_so.flush(); 

Chaque fois que l'application vous permet de démarrer d'abord vérifier s'il y a déjà un LocalSharedObject avec vos données présentes et si oui vous charger vos données à partir de celui-ci:

var my_so:SharedObject = SharedObject.getLocal("widgetState"); 
if (my_so.data.buttonClicks != null) currentClicks = my_so.data.buttonClicks; 
+0

Merci Quasimondo, j'ai essayé ça et ça marche bien. Est-ce la seule façon de sauver l'état?Je veux dire, est-ce que je peux en quelque sorte éviter les caractéristiques "recharger swf quand déplacé" de Firefox et de Chrome pour que l'application sauve son état sans que j'aie à écrire le code de SharedObject? merci Q – Rose

+0

Malheureusement, je ne suis pas un expert pour les questions liées à DOM, car cela semble être plus un problème de la façon dont le navigateur gère cela. Je ne sais pas pourquoi vous devez passer le swf à un autre DIV, mais si ce n'est que pour changer de position à l'écran, vous pouvez essayer une solution de contournement où vous placez le swf dans son propre DIV et le positionnez position des autres DIVs. Mais peut-être que ce n'est pas possible dans votre configuration spécifique. – Quasimondo

+0

Ouais, l'histoire est comme ceci: J'ai une plate-forme déjà développée qui permet de glisser-déposer, glisser, redimensionner ... etc des applications swf. Cela me permet de déplacer mes applications swf dans un panneau, mais la chose «d'état» n'est pas gérée. Donc j'essayais de changer la plate-forme pour faire "bouger" + "mémoriser l'état" (c'est-à-dire ne pas recharger). Mais cela n'a pas fonctionné comme je l'ai mentionné sur le problème du support du navigateur ... peut-être la solution (ou même la solution) est d'utiliser sharedobject pour l'état et d'utiliser la fonctionnalité de déplacement de l'ancienne plate-forme. Merci Q. – Rose

1

Le problème ici est probablement le fait que vous supprimez vraiment et insérer le fichier flash à nouveau. Si vous aviez un conteneur autour de l'objet swf, vous pouvez le positionner avec CSS/JavaScript n'importe où, mais je ne connais pas un bon moyen de conserver l'état lors du déplacement physique de l'objet swf DOM.

+1

À droite, il semble que le swf est en cours de rechargement en chrome et ff. Voyons si un corps a un moyen de préserver l'état. – Rose

Questions connexes