Запись локального SharedObject в AS3 swf и чтение его в загруженном AS2 swf

Я пытаюсь поделиться данными между as3 swf и as2 swf, которые он загрузил. Проблема в том, что я не могу заставить мой as2 swf читать локальный объект, написанный as3 swf. Он просто возвращает undefined, когда я пытаюсь получить ссылку на общий объект.

// AS3

_SharedObj.objectEncoding = ObjectEncoding.AMF0;
_SharedObj.data.blah = 'str';
_SharedObj.flush(500);

// ... some code to handle the flush status. I verified that the values were flushed.


// AS2

var so = SharedObject.getLocal('somestr', '/');
trace(so);  // undefined! 

Я здесь в растерянности. Я могу прочитать общий объект AS2 из AS3, но не могу сделать это по-другому. Я подтвердил, что оба ссылаются на один и тот же путь '/' (в частности, localhost, я даже проверил физический файл в файловой системе - он находится в каталоге #localhost каталога #SharedObjects на моем Mac). ObjectEncoding настроен на использование Формат AS2 AMF.

В документации конкретно говорится, что нужно установить эту кодировку, чтобы разрешить as2 получить доступ к одному и тому же общему объекту, поэтому я предполагаю, что это означает, что это возможно.

У кого-нибудь есть идеи?


person whoisbenli    schedule 13.10.2009    source источник
comment
Можете ли вы опубликовать ссылку на документы об этом? Кстати, если вы не можете заставить это работать, подумайте об использовании LocalConnection для связи между as3 и (загруженными или другими) as2 swfs.   -  person Amarghosh    schedule 14.10.2009


Ответы (4)


Не могу понять, что у вас не работает, при использовании FlashDevelop , следующий код мне идеально подходит:

//AS3
var so : SharedObject = SharedObject.getLocal('somestr', '/');
so.objectEncoding = ObjectEncoding.AMF0;
so.data.blah = 'str';
so.flush();

//AS2
var so = SharedObject.getLocal('somestr', '/'); 
trace(so.data.blah);  // str
person Dudi    schedule 21.06.2010

Ваша проблема - это swf-идентификатор, созданный для Flash Player и используемый им для использования SharedObject. Вы не видите этого в коде, но когда вы ищете файл SharedObject, вы его видите. Это функция безопасности. Я не знаю, как это сделать.

person Konrad    schedule 14.10.2009

Я столкнулся с аналогичной проблемой - мы в конечном итоге пошли по отвратительному пути чтения / записи LSO с помощью AS2 SWF и взаимодействия с AS3 SWF через JavaScript / ExternalConnection. Это было грубо, но работало надежно.

person JMHNilbog    schedule 14.10.2009

У меня была та же проблема, и я думаю, что ответ Дуди, приведенный выше, - это правильный путь - я добавил следующую строку в свой код после вызова SharedObject.getLocal (), и мой AS2 swf смог загрузить мой общий объект, написанный на AS3.

so.objectEncoding = ObjectEncoding.AMF0

Спасибо, Дуди!

person undefined    schedule 05.12.2011