PDA

Просмотр полной версии : Общие SharedObject


Vilya21
01.03.2011, 21:46
Здравствуйте.
Подскажите как сделать, чтобы две разные флэшки могли читать из одного SharedObject-a? А то у меня получается только когда запускаю две абсолютно одинаковые флэшки.

in4core
01.03.2011, 23:03
Ну вообще то вы хранилище указываете заранее, и с него же берете, соотв и разные флешки будут читать одно и тоже если верно написали. А вообще шара сохраняется всегда в одно место, только файл разный в зависимости от гетлокал. И вообще не понятно что ЗНАЧИТ 2 одинаковые флешки, это как :?

GBee
01.03.2011, 23:29
В справке (http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/net/SharedObject.html#getLocal()) есть

Чтобы избежать непреднамеренного ограничения доступа к общему объекту, используйте параметр localpath. Наиболее "демократичный" подход заключается в установке localPath со значением / (косая черта). В этом случае общий объект становится доступным всем SWF-файлам в домене, но при этом увеличивается вероятность возникновения конфликтов имен с другими общими объектами в домене. При подходе ограничивающего характера в localPath добавляются имена папок, представляющих полный путь к SWF-файлу. Например, для общего объекта portfolio, созданного SWF-файлом по адресу www.myCompany.com/apps/stockwatcher.swf, можно установить параметр localPath со значением /, /apps или /apps/stockwatcher.swf. Следует определить, какой подход обеспечивает оптимальную гибкость для вашего приложения

Vilya21
02.03.2011, 15:37
Код первого проекта:


.....
var so:SharedObject = SharedObject.getLocal('test');
so.data.session_id = 'kakie-to dannie';
so.flush();
.....


код второго проекта:


.....
var so:SharedObject = SharedObject.getLocal('test');
trace(so.data.session_id); //undefined
.....


Получается что второй проект не видит то что записал первый. Опытным путём получилось что только такой же swf может считать данные, которые им же записаны. Что у меня не так?

cleptoman
02.03.2011, 15:40
var so:SharedObject = SharedObject.getLocal('/test');
м?

Vilya21
02.03.2011, 15:48
Не, всё равно undefined =((

in4core
02.03.2011, 16:08
Ну ваще то все так, а почему не работает не понятно. Клептоман / тут не причем как бы. Я не знаю в чем ваша проблема , но

var so:SharedObject = SharedObject.getLocal('test'); // перевожу : создаем новый объект шары, подцепляем данные с 'test' файла. Тоесть тут ошибок не должно быть.

Попробуйте сделать следующее :

Создайте кнопку в основной флешке - по клику : сначала проведите flush() как положено, затем сделайте trace(ваших данных) - если записалось ок. Следующей строкой грузим флешку, по событию INIT вызовем функцию из подгруженной флешки в которой сделаем нью шару и протрейсим данные. И наконец, если данные все равно undefined
1. Попробуйте послать тупо строку ( возможно косяк в ваших данных );
2. Сделайте flush() во второй флешке с заданием параметра, и протрейсите сразу.

После всех этих пунктов - отпишитесь если не работает

GBee
02.03.2011, 17:56
Будьте внимательнее в getLocal первый параметр name, а не localPath

package
{
import flash.display.Sprite;
import flash.net.SharedObject;

public class SO1 extends Sprite
{
public function SO1()
{
var so:SharedObject = SharedObject.getLocal("test", "/");
so.data.session_id = 'kakie-to dannie';
so.flush();
}
}
}

package
{
import flash.display.Sprite;
import flash.net.SharedObject;

public class SO2 extends Sprite
{
public function SO2()
{
var so:SharedObject = SharedObject.getLocal("test", "/");
trace(so.data.session_id);
}
}
}

in4core
02.03.2011, 18:22
Будьте внимательнее в getLocal первый параметр name, а не localPath Как бэ без указания пути он сохраняет в одно место. так что это не причем. ведь он не указывает путь

GBee
02.03.2011, 18:44
Как бэ без указания пути он сохраняет в одно место. так что это не причем. ведь он не указывает путь
Я ничего не понял :о(

Я пример привел для
чтобы две разные флэшки могли читать из одного SharedObject

in4core
02.03.2011, 22:37
Gbee когда мы пишем getLocal('name') у нас тот самый name сохраняется в дефолтный путь после Flush() ю И потом как ты не крути, вызывай хоть откуда getLocal('name') он все равно перейдет по дефолтному пути. Ваша запись ничем не отличается от его записи. тоесть getLocal('name' , '/') будет искать там же, что и просто getLocal('name')

GBee
02.03.2011, 22:51
:rtfm:
Подскажите как сделать, чтобы две разные флэшки могли читать из одного SharedObject-a?

Добавлено через 3 минуты
я уже давал ссылку (http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/net/SharedObject.html#getLocal())

Несмотря на то, что параметр localPath не является обязательным, ему можно найти применение, особенно в тех случаях, когда доступ к общему объекту требуется и другим SWF-файлам. Если данные в общем объекте специфичны для одного SWF-файла, который не будет перемещен в другое место, то целесообразнее использовать значение по умолчанию. Если доступ к общему объекту нужен другим SWF-файлам или если SWF-файл, создающий общий объект, будет впоследствии перемещен, то значение этого параметра определенно влияет на доступность общего объекта. Например, если вы создадите общий объект, у которого параметр localPath будет иметь значение по умолчанию (полный путь к SWF-файлу), то данный общий объект будет недоступен каким-либо другим SWF-файлам. Если вы позднее переместите исходный SWF-файл в другое место, то даже этому SWF-файлу не будут доступны данные, которые уже были сохранены в общем объекте.