Flash-приложение теряет состояние после перемещения в другой div с помощью JavaScript - PullRequest
2 голосов
/ 29 июля 2010

У меня есть простое флеш-приложение, которое рассчитывает на нажатие кнопки.Я загружаю его на страницу, и код javaScript выполняет некоторые манипуляции с DOM, чтобы переместить его из одного тега div в другой.

Проблема: состояние счетчика не сохраняется, поскольку узел swf перемещается из одного узла вдругое.

Что я сделал:

  1. Я просто получаю узел, используя функцию getElementbyId javascript, а затем, как только я получу исходный и целевой узлы div, я использую

    destinationNode.appendChild(sourceNode); //javascript
    

Это хорошо работает в Internet Explorer, но не работает в Chrome и Firefox.

Итак, я попробовал библиотеку прототипов.

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

К сожалению, это работает только в IE, а не в Chrome и Firefox.3. Сначала я попытался клонировать исходный узел и поместить клонированный объект в конечный элемент div.Как:

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

но я получил ошибку.Это говорит об исключении ... «Узел не может быть вставлен в указанную точку в иерархии» код: «3» ...

Моя проблема не в этой ошибке.Я обеспокоен тем, что решения 1 и 2 работают в Internet Explorer, а не в Firefox и Chrome.

Любой человек, который знает какой-либо способ заставить flash вспомнить его состояние при перемещении из одного div в другой в Firefox, Chrome и IE ?? *

спасибо

Ответы [ 2 ]

1 голос
/ 30 июля 2010

Как вы уже заметили, похоже, что SWF перезагружается при каждом его перемещении. Таким образом, вам придется вручную отслеживать текущее состояние и на случай, если оттуда будет получена перезагрузка. Способ сделать это - использовать LocalSharedObject, также известный как «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();

Всякий раз, когда приложение запускается, вы сначала проверяете, существует ли уже LocalSharedObject с вашими данными, и если да, вы загружаете данные из него:

var my_so:SharedObject = SharedObject.getLocal("widgetState");
if ( my_so.data.buttonClicks != null ) currentClicks = my_so.data.buttonClicks;
1 голос
/ 29 июля 2010

Проблема здесь, вероятно, в том, что вы действительно заново удаляете и вставляете флэш-файл. Если бы у вас был контейнер вокруг объекта swf, вы могли бы разместить его с помощью CSS / JavaScript где угодно, но я не знаю хорошего способа сохранить состояние при физическом перемещении объекта swf DOM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...