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

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

Что я сделал:

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

    destinationNode.appendChild(sourceNode); //javascript
    

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

  1. Тогда я попробовал библиотеку прототипов.

    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.

Любой орган, который знает, как заставить флеш-память, помнить ее состояние, когда он перемещается из одного div в другой в firefox, chrome и IE ??

Благодарность

2
Rose 29 Июл 2010 в 20:48

2 ответа

Лучший ответ

Как вы уже заметили, похоже, что 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
Quasimondo 30 Июл 2010 в 09:32

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

1
Stefan Kendall 29 Июл 2010 в 16:54