Чтение данных из объектов SharedObject

Прочитать данные из некоторого sol-файла очень просто: на его основании должен быть создан объект класса SharedObject, для чего используется метод getLocal(). Как вы помните, данный метод выполняет двоякую роль. Если sol-файла с данным именем в соответствующей фильму папке нет, то будет создан «пустой» объект класса SharedObject. Если же такой sol-файл находится, то формируется описывающий его объект SharedObject. Этот объект будет полностью аналогичен тому, который был использован для записи sol-файла.

var new_sol:SharedObject=SharedObject.getLocal("new");
new_sol.data.date=(new Date()).toString();
new_sol.flush();
var read_obj:SharedObject=SharedObject.getLocal("new");
trace(read_obj.data.date); // Выводит: Fri Mar 5 21:34:33 GMT+0300 2004

Может ли один SWF-фильм считать данные из sol-файла, записанного другим SWF-фильмом? Все зависит от того, откуда эти фильмы поступили. Если они относятся к разным доменам, то нет. Эта особенность обусловлена требованиями безопасности: информация, заносимая в sol-файл, может носить приватный характер (например, пароль), поэтому она должна быть недоступна для «чужих» фильмов. Если же фильмы поступили с одного домена, то можно создать sol-файл, который будет использоваться ими совместно.


Для этого следует поместить его непосредственно в папку домена директории Flash Player, а не во вложенную в папку домена директорию SWF-фильма.

Чтобы это сделать, относительный путь к директории (отсчитанный от папки домена), в которой должен располагаться sol-файл, следует прописать в качестве второго параметра метода getLocal():

// Код фильма А (проигрывается первым)
var sol:SharedObject=SharedObject.getLocal("shared", "/");
sol.data.name="Jonh";
sol.flush t);
// Код фильма в (проигрывается вторым)
var read_sol:SharedObject=SharedObject.getLocal("shared", "/");
trace(read_sol.data.name); // Выводит: Jonh

Результатом выполнения кода фильма А, относящегося к домену www.xyz.com, станет то, что в папку www.xyz.com директории Flash Player будет помещен файл shared.sol. Любой фильм с того же домена сможет считать из него данные (см. код фильма В в примере выше). Если фильмы, которые должны использовать данные одного sol-файла, поступили с одного и того же поддомена некоторого домена, то sol-файл можно поместить в соответствующую этому поддомену папку (или в любую папку, входящую в путь к нему). Например, если один фильм располагается по адресу www.xyz.com/swf/new/anim/multl.swf, а второй — по адресу www.xyz.com/swf/new/efTects/blur.swf, то их общую базу данных можно поместить в папку swf папки www.xyz.com:

var sol:SharedObject=SharedObject.getlocal("base", "/swf");

Но лучше расположить sol-файл в папке new директории swf, соответствующей ближайшему к обоим фильмам поддомену:

var sol:SharedObject=ShareObject.getLocal("base", "/swf/new");

Применять, когда это возможно, общие для нескольких фильмов sol-файлы стоит, так как объем данных, который могут сохранить фильмы с одного домена на винчестере, строго ограничен.

Кроме того, общие sol-файлы могут использоваться для обмена данными между двумя проигрываемыми одновременно фильмами (но лучше для этого все же применять класс LocalConnection)..



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Взаимодействие с принтером
Взаимодействие со средой разработки
Взаимодействие со средствами чтения с экрана
Объект CustomActions
Определение размеров фильма и величины окна плейера