Главная / Action Script 3
Пакетflash.net
Классpublic class SharedObject
НаследованиеSharedObject Inheritance EventDispatcher Inheritance Object

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Класс SharedObject используется для чтения и хранения ограниченных объемов данных на пользовательском компьютере или на сервере. Общие объекты обеспечивают обмен данными в режиме реального времени между несколькими клиентскими SWF-файлами и объектами, которые находятся постоянно на локальном компьютере или удаленном сервере. Локальные общие объекты схожи с файлами cookie в обозревателях, а удаленные общие объекты имеют сходство с устройствами передачи данных в режиме реального времени. Для использования удаленных общих объектов требуется Adobe Flash Media Server.

Используйте общие объекты для следующего:

Для создания локального общего объекта вызовите SharedObject.getLocal(). Для создания удаленного общего объекта вызовите SharedObject.getRemote().

При закрытии приложения общие объекты стираются или записываются на диск. Для явной записи данных на диск можно также вызвать метод flush().

Примечания по локальному дисковому пространству. Локальные общие объекты имеют определенные ограничения, которые следует обязательно учитывать при проектировании приложений. В некоторых случаях SWF-файлам запрещено записывать локальные общие объекты. Иногда данные, хранящиеся в локальных общих объектах, могут быть стерты без вашего ведома. Пользователи Flash Player могут управлять дисковым пространством, доступным отдельным доменам или всем доменам. Когда пользователи уменьшают объем доступного дискового пространства, некоторые локальные общие объекты могут быть удалены. Пользователи Flash Player также снабжены элементами управления конфиденциальностью, которые могут запретить сторонним доменам (другим доменам, отличным от домена, указанного в текущий момент в адресной строке обозревателя) чтение или запись локальных общих объектов.

Примечание. SWF-файлы, хранящиеся и запускаемые не на удаленном сервера, а на локальном компьютере, всегда могут записывать на диск сторонние общие объекты. Дополнительные сведения о сторонних общих объектах см. на панели Global Storage Settings в справочной системе Flash Player.

Рекомендуется проверять наличие сбоев, связанных с объемом дискового пространства и настройками конфиденциальности пользователей. Выполняйте данные проверки при вызове getLocal() и flush():

При попытке SWF-файла создать или модифицировать локальные общие объекты следует убедиться в том, что ширина этого SWF-файла составляет не менее 215 пикселов, а высота — не менее 138 пикселов (это минимальные размеры для отображения диалогового окна, предупреждающего пользователя о необходимости увеличить место для хранения локальных общих объектов). Если данный SWF-файл меньше указанных размеров, но при этом увеличение пространства для хранения все же требуется, происходит сбой SharedObject.flush(), после которого возвращается значение SharedObjectFlushedStatus.PENDING и отправляется событие netStatus.

Удаленные общие объекты. При работе с Flash Media Server можно создавать и применять удаленные общие объекты, которые совместно используются в режиме реального времени всеми клиентами, подключенными к вашему приложению. Если какой-либо клиент изменяет свойство удаленного общего объекта, то данное свойство меняется для всех подключенных клиентов. Удаленные общие объекты можно использовать для синхронизации клиентов (например, игроков в многопользовательской игре).

Каждый удаленный общий объект имеет свойство data, которое представляет собой объект со свойствами, в которых хранятся данные. Чтобы изменить свойство объекта данных, вызовите setProperty(). Сервер обновляет свойства, создает событие sync и отправляет свойства обратно подключенным клиентам.

Удаленным общим объектам можно задать постоянство: на клиенте, на сервере или сразу на обоих объектах. По умолчанию проигрыватель Flash Player сохраняет постоянные локальные общие объекты удаленного типа, размер которых не превышает 100 килобайт. При сохранении более крупного объекта Flash Player отображает диалоговое окно "Локальное хранение", в котором пользователь может разрешить или запретить локальное хранение общего объекта. Убедитесь в том, что габаритные размеры используемой рабочей области составляют не менее 215х138 пикселов. Это минимальный размер, необходимый Flash для отображения диалогового окна.

Если пользователь выбирает параметр Allow, сервер сохраняет общий объект и отправляет событие netStatus со свойством code, имеющим значение SharedObject.Flush.Success. Если пользователь выбирает параметр Deny, сервер сохраняет общий объект и отправляет событие netStatus со свойством code, имеющим значение SharedObject.Flush.Failed.

Посмотреть примеры

См. также

flush()
getLocal()
netStatus


Общедоступные свойства
 СвойствоОпределено
  client : Object
Указывает объект, для которого вызываются методы ответного вызова.
SharedObject
 Inheritedconstructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта.
Object
  data : Object
[только для чтения] Сборник атрибутов, связанных со свойством data объекта. Эти атрибуты можно совместно использовать и сохранять.
SharedObject
  defaultObjectEncoding : uint
[статические] Кодировка объекта по умолчанию (версия AMF) для всех локальных общих объектов, созданных в SWF-файле.
SharedObject
  fps : Number
[только для записи] Определяет, сколько раз в секунду изменения общего объекта, внесенные клиентом, отправляются на сервер.
SharedObject
  objectEncoding : uint
Кодировка объекта (версия AMF) для данного общего объекта.
SharedObject
 Inheritedprototype : Object
[статические] Ссылка на модель объекта класса или функции.
Object
  size : uint
[только для чтения] Текущий размер общего объекта (в байтах).
SharedObject
Общедоступные методы
 МетодОпределено
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Регистрирует объект прослушивателя события в объекте EventDispatcher, в результате чего прослушиватель будет получать уведомления о событиях.
EventDispatcher
  
Удаляет все данные и удаляет общий объект с диска для локальных общих объектов.
SharedObject
  
Закрывает подключение между удаленным общим объектом и сервером.
SharedObject
  
connect(myConnection:NetConnection, params:String = null):void
Подключается к удаленному общему объекту на сервере с помощью указанного объекта NetConnection.
SharedObject
 Inherited
Передает событие в поток событий.
EventDispatcher
  
flush(minDiskSpace:int = 0):String
Немедленно записывает постоянный локальный общий объект в локальный файл.
SharedObject
  
getLocal(name:String, localPath:String = null, secure:Boolean = false):SharedObject
[статические] Возвращает ссылку на постоянный локальный общий объект, доступный только для текущего клиента.
SharedObject
  
getRemote(name:String, remotePath:String = null, persistence:Object = false, secure:Boolean = false):SharedObject
[статические] Возвращает ссылку на общий объект на сервере Flash Media Server, доступный нескольким клиентам.
SharedObject
 Inherited
Проверяет наличие у объекта EventDispatcher прослушивателей событий, которые зарегистрированы для получения уведомлений о событиях определенного типа.
EventDispatcher
 Inherited
Показывает, определено ли заданное свойство для объекта.
Object
 Inherited
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра.
Object
 Inherited
Показывает наличие заданного свойства и его перечисляемость.
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Удаляет прослушиватель из объекта EventDispatcher.
EventDispatcher
  
send(... arguments):void
Транслирует сообщение всем клиентам, подключенным к удаленному общему объекту (включая клиента, отправляющего сообщение).
SharedObject
  
setDirty(propertyName:String):void
Указывает серверу, что значение свойства в общем объекте было изменено.
SharedObject
  
setProperty(propertyName:String, value:Object = null):void
Обновляет значение свойства в общем объекте и указывает серверу, что значение свойства было изменено.
SharedObject
 Inherited
Задает доступность динамического свойства для операций цикла.
Object
 Inherited
Возвращает строковое представление заданного объекта.
Object
 Inherited
Возвращает элементарное значение заданного объекта.
Object
 Inherited
Проверяет, зарегистрирован ли прослушиватель событий в объекте EventDispatcher или в любом из его предков для получения уведомлений о событиях определенного типа.
EventDispatcher
События
 Событие Сводка Определено
 Inherited[многоадресное событие] Отправляется, когда проигрыватель Flash Player перемещается в фокус операционной системы и становится активным.EventDispatcher
  Отправляется, когда исключение создается асинхронным образом, то есть в коде, изначально имеющем асинхронную природу.SharedObject
 Inherited[многоадресное событие] Отправляется, когда проигрыватель Flash Player покидает фокус операционной системы и становится неактивным.EventDispatcher
  Отправляется, когда экземпляр SharedObject сообщает о своем состоянии или о случившейся ошибке.SharedObject
  Отправляется, когда удаленный общий объект обновляется сервером.SharedObject
Сведения о свойстве
clientсвойство
client:Object  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Указывает объект, для которого вызываются методы ответного вызова. Объект по умолчанию: this. Если в свойстве client указать другой объект, методы обратного вызова будут вызываться на этом другом объекте.



Реализация
    public function get client():Object
    public function set client(value:Object):void

Выдает
TypeError — В качестве свойства client должен быть указан ненулевой объект.
dataсвойство 
data:Object  [только для чтения]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Сборник атрибутов, связанных со свойством data объекта. Эти атрибуты можно совместно использовать и сохранять. Каждый атрибут может быть объектом любого типа ActionScript или JavaScript — массивом, числом, логическим значением, ByteArray, XML и т.п. Например, в следующих строках присваиваются значения различным аспектам общего объекта:

     var items_array:Array = new Array(101, 346, 483);
     var currentUserIsAdmin:Boolean = true;
     var currentUserName:String = "Ramona";
     
     var my_so:SharedObject = SharedObject.getLocal("superfoo");
     my_so.data.itemNumbers = items_array;
     my_so.data.adminPrivileges = currentUserIsAdmin;
     my_so.data.userName = currentUserName;
     
     for (var prop in my_so.data) {
       trace(prop+": "+my_so.data[prop]);
     }
     

Все атрибуты свойства data общего объекта сохраняются, если объект обладает постоянством, при этом данный общий объект содержит следующую информацию:

     userName: Ramona
     adminPrivileges: true
     itemNumbers: 101,346,483
     

Примечание. Не следует присваивать значения непосредственно свойству data общего объекта, например so.data = someValue, так как проигрыватель Flash Player игнорирует подобное присвоение.

Чтобы удалить атрибуты для локальных общих объектов, используйте код delete so.data.attributeName, так как установка значения null или undefined для атрибута локального общего объекта не приводит к удалению самого атрибута.

Чтобы создать значения private (значения, доступные только экземпляру клиента в процессе использования объекта и не сохраняемые при закрытии объекта) для общего объекта, создайте свойства, не называя их data, и сохраните их, как показано в следующем примере:

     var my_so:SharedObject = SharedObject.getLocal("superfoo");
     my_so.favoriteColor = "blue";
     my_so.favoriteNightClub = "The Bluenote Tavern";
     my_so.favoriteSong = "My World is Blue";
     
     for (var prop in my_so) {
       trace(prop+": "+my_so[prop]);
     }
     

Общий объект содержит следующие данные:

     favoriteSong: My World is Blue
     favoriteNightClub: The Bluenote Tavern
     favoriteColor: blue
     data: [object Object]
     

Для удаленных общих объектов, используемых при работе с сервером, все атрибуты свойства data доступны всем клиентам, подключенным к общему объекту. При этом все атрибуты сохраняются, если объект обладает постоянством. Если один из клиентов изменит значение атрибута, то новое значение будет видно всем клиентам.



Реализация
    public function get data():Object

См. также

defaultObjectEncodingсвойство 
defaultObjectEncoding:uint  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Кодировка объекта по умолчанию (версия AMF) для всех локальных общих объектов, созданных в SWF-файле. Когда локальные общие объекты записываются на диск, свойство SharedObject.defaultObjectEncoding указывает необходимую версию формата Action Message Format: ActionScript 3.0 (AMF3), ActionScript 1.0 или 2.0 (AMF0).

Дополнительные сведения о кодировке объекта, включая различие между кодировкой в локальных и удаленных общих объектах, см. в описании свойства objectEncoding.

Значение SharedObject.defaultObjectEncoding по умолчанию: использование формата ActionScript 3.0 (AMF3). При необходимости записать локальные общие объекты, которые смогут быть прочитаны SWF-файлами ActionScript 2.0 или 1.0, настройте SharedObject.defaultObjectEncoding на использование формата ActionScript 1.0 или ActionScript 2.0, flash.net.ObjectEncoding.AMF0 (в начале сценария) до непосредственного создания таких объектов. Все локальные общие объекты, созданные после этого, будут использовать кодировку AMF0 и смогут взаимодействовать с более старым содержимым. После создания локальных общих объектов вы не сможете изменить значение objectEncoding существующих локальных общих объектов путем задания параметра SharedObject.defaultObjectEncoding.

Чтобы установить кодировку не для всех общих объектов, созданных SWF-файлов, а для отдельных объектов, установите свойство objectEncoding локального общего объекта.



Реализация
    public static function get defaultObjectEncoding():uint
    public function set defaultObjectEncoding(value:uint):void

См. также

fpsсвойство 
fps:Number  [только для записи]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Определяет, сколько раз в секунду изменения общего объекта, внесенные клиентом, отправляются на сервер.

Используйте этот метод при необходимости управлять объемом данных, перемещаемых между клиентом и сервером. Например, если соединение между клиентом и сервером характеризуется относительно медленной скоростью, может потребоваться установить для параметра fps более низкое значение. И наоборот, если клиент подключен к многопользовательскому приложению, в котором важен расчет времени, можно установить для fps относительно высокое значение.

Настройка параметра fps приведет к появлению события sync и обновит все изменения на сервере. Если только требуется вручную обновить сервер, установите для fps значение 0.

Изменения не отправляются на сервер до тех пор, пока не будет отправлено событие sync. Другими словами, если время реагирования сервера слишком мало, обновления могут отправляться на сервер с меньшей частотой, чем значение, указанное в данном свойстве.



Реализация
    public function set fps(value:Number):void
objectEncodingсвойство 
objectEncoding:uint  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Кодировка объекта (версия AMF) для данного общего объекта. Когда локальный общий объект записывается на диск, свойство objectEncoding указывает необходимую версию формата Action Message Format: ActionScript 3.0 (AMF3), ActionScript 1.0 или 2.0 (AMF0).

Кодировка объекта обрабатывается в зависимости от типа общего объекта (локальный или удаленный).



Реализация
    public function get objectEncoding():uint
    public function set objectEncoding(value:uint):void

Выдает
ReferenceError — Произведена попытка установить значение свойства objectEncoding на удаленном общему объекте. Для удаленных общих объектов это свойство доступно только для чтения, так как его значение определяется соответствующим экземпляром NetConnection.

См. также

sizeсвойство 
size:uint  [только для чтения]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Текущий размер общего объекта (в байтах).

Flash вычисляет размер общего объекта, просматривая свойства всех его данных. Чем больше свойств данных содержит объект, тем больше времени требуется для вычисления размера. Анализ размера объекта может занять существенный объем ресурсов, поэтому этот метод следует использовать только в случае особой необходимости.



Реализация
    public function get size():uint

См. также


Пример
Следующий код создает объект SharedObject с помощью идентификатора thehobbit. Свойство username добавляется в свойство данных объекта SharedObject. Затем отслеживается свойство size, в результате чего возвращается указанное значение.

import flash.net.SharedObject;

// if these get copied or not
var mySo:SharedObject = SharedObject.getLocal("thehobbit");
mySo.data.username = "bilbobaggins";
trace(mySo.size); // 55
Сведения о методе
clear()метод
public function clear():void

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Удаляет все данные и удаляет общий объект с диска для локальных общих объектов. Ссылка на общий объект все еще активна, однако его свойства data удалены.

Для удаленных общих объектов, используемых при работе с Flash Media Server, метод clear() отключает объект и стирает все его данные. Если общий объект характеризуется локальным постоянством, данный метод также удаляет этот объект с диска. Ссылка на общий объект все еще активна, однако его свойства data удалены.


Пример

С помощью следующего кода создается (и при повторном выполнении — извлекается) объект SharedObject, идентификатор которого имеет значение hostName. Свойство username добавляется в свойство данных объекта SharedObject. Наконец вызывается метод clear(), который стирает всю информацию, добавленную в объект данных (в данном случае было только одно свойство username).

package {
    import flash.net.SharedObject;

    public class SharedObject_clear {
        private var hostName:String = "yourDomain";
        private var username:String = "yourUsername";

        public function SharedObject_clear() {
            var mySo:SharedObject = SharedObject.getLocal(hostName);
            if(mySo.data.username == null) {
                mySo.data.username = username;
                trace("set: " + mySo.data.username); // yourUsername
            }
            else {
                mySo.clear();
                trace("cleared: " + mySo.data.username); // undefined
            }
        }
    }
}
close()метод 
public function close():void

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Закрывает подключение между удаленным общим объектом и сервером. Если удаленный общий объект имеет локальное постоянство, то после вызова данного метода пользователь сможет вносить изменения в локальную копию объекта. Любые изменения, внесенные в локальный объект, отправляются на сервер при следующем подключении пользователя к удаленному общему объекту.

connect()метод 
public function connect(myConnection:NetConnection, params:String = null):void

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Подключается к удаленному общему объекту на сервере с помощью указанного объекта NetConnection. Используйте данный метод после вызова getRemote(). При успешном подключении отправляется событие sync.

Перед тем как перейти к работе с удаленным общим объектом, прежде всего проверьте его на наличие ошибок с помощью оператора try..catch..finally. Далее, перед тем как вносить какие-либо изменения в общий объект, необходимо прослушать и обработать событие sync. Любые изменения, внесенные локально до отправки события sync, могут быть потеряны.

Чтобы подключиться к удаленному общему объекту, вызовите метод connect(), например:

     var myRemoteSO:SharedObject = SharedObject.getRemote("mo", myNC.uri, false);
     myRemoteSO.connect(myNC);
     

Параметры

myConnection:NetConnection — Объект NetConnection, использующий протокол RTMP (например, объект NetConnection, применяемый для обмена данными с сервером Flash Media Server).
 
params:String (default = null) — Строка, определяющая сообщение, которое необходимо передать удаленному общему объекту на сервере. Не используется с Flash Media Server.


Выдает
Error — Проигрыватель Flash Player не смог подключиться к указанному удаленному общему объекту. Убедитесь в том, что экземпляр NetConnection действует и подключен, а также что на сервере был успешно создан удаленный общий объект.

См. также

flush()метод 
public function flush(minDiskSpace:int = 0):String

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Немедленно записывает постоянный локальный общий объект в локальный файл. Если вы не используете данный метод, проигрыватель Flash Player записывает общий объект в файл по окончании соответствующего сеанса: когда SWF-файл закрывается, когда общий объект попадает в мусор, так как на него больше ничто не ссылается, а также когда вы вызываете SharedObject.clear() или SharedObject.close().

Если данный метод возвращает значение SharedObjectFlushStatus.PENDING, проигрыватель Flash Player отображает диалоговое окно, предлагающее пользователю увеличить объем дискового пространства, доступный для объектов из этого домена. Чтобы открыть пространство для роста общего объекта при его сохранении в будущем, что позволит избежать возвращенных значений PENDING, передайте значение для параметра minDiskSpace. При попытке записать файл проигрыватель Flash Player не проверяет наличие достаточного места для сохранения общего объекта в его текущем размере, а выясняет число байтов, переданных minDiskSpace.

Например, если вы предполагаете, что при росте максимальный размер общего объекта составит 500 байт (хотя в начале он будет намного меньшим), установите для minDiskSpace значение 500. Когда Flash запрашивает у пользователя возможность выделить дисковое пространство для общего объекта, объем запроса составляет 500 байт. После того как пользователь выделяет требуемый объем пространства, Flash больше не запрашивает дополнительное пространство в последующих попытках очистки объекта (его размер при этом не должен превышать 500 байт).

Данный метод вызывается снова после того, как пользователь отреагирует на диалоговое окно. Событие netStatus отправляется со свойством code, имеющим значение SharedObject.Flush.Success или SharedObject.Flush.Failed.

Параметры

minDiskSpace:int (default = 0) — Минимальный объем дискового пространства (в байтах), который должен быть выделен для данного объекта.

Возвращает
String — Одно из следующих значений:
  • SharedObjectFlushStatus.PENDING: Пользователь разрешил локальное хранение информации для объектов из этого домена, но выделенного объема пространства недостаточно для хранения объекта. Проигрыватель Flash Player предупреждает пользователя о необходимости увеличить свободное дисковое пространство. Для того чтобы обеспечить необходимое при сохранении общего объекта место, тем самым избегая возврата значения SharedObjectFlushStatus.PENDING, следует указать значение для minDiskSpace.
  • SharedObjectFlushStatus.FLUSHED: Общий объект был успешно записан как файл на локальном диске.

Выдает
Error — Проигрыватель Flash Player не может записать общий объект на диске. Эта ошибка может возникнуть, если пользователь навсегда запретил локальное хранение информации для объектов из этого домена.

Примечание. Локальное содержимое всегда может записывать на диск общие объекты из сторонних доменов (доменов, отличных от домена, указанного в данный момент в адресной строке обозревателя), даже если запись сторонних общих объектов на диск запрещена.

См. также


Пример

С помощью следующего кода создается (и при повторном выполнении — извлекается) объект SharedObject, идентификатор которого имеет значение hostName. Свойство username добавляется в свойство данных объекта SharedObject. Затем вызывается метод flush(), сопровождаемый проверкой того, был ли возврат строки pending или логического значения true или false. Необходимо помнить, что все открытые экземпляры SharedObject будут автоматически стерты при закрытии текущего экземпляра проигрывателя Flash Player.
package {
    import flash.net.SharedObject;

    public class SharedObject_flush {
        private var hostName:String = "yourDomain";
        private var username:String = "yourUsername";

        public function SharedObject_flush() {
            var mySo:SharedObject = SharedObject.getLocal(hostName);
            mySo.data.username = username;
            var flushResult:Object = mySo.flush();
            trace("flushResult: " + flushResult);
            trace(mySo.data.username); // yourUsername
        }
    }
}
getLocal()метод 
public static function getLocal(name:String, localPath:String = null, secure:Boolean = false):SharedObject

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Возвращает ссылку на постоянный локальный общий объект, доступный только для текущего клиента. Данный метод создает общий объект, если таковой не существовал ранее. Если любые значения, переданные методу getLocal(), являются недопустимыми или вызов завершился сбоем, Flash Player создает соответствующее исключение.

В представленном коде показано, как присвоить переменной возвращенную ссылку на общий объект:

var so:SharedObject = SharedObject.getLocal("savedData");

Примечание. Если пользователь запретил локальное хранение для данного домена, объект не будет сохраняться локально, даже если определено значение для параметра localPath. Исключением для данного правила является локальное содержимое. Локальное содержимое всегда может записывать на диск общие объекты из сторонних доменов (доменов, отличающихся от домена, указанного в данный момент в адресной строке обозревателя), даже если запись сторонних общих объектов на диск запрещена.

Чтобы избежать конфликта имен, проигрыватель Flash отслеживает место размещения SWF-файла, создающего общий объект. Например, если SWF-файл на сайте www.myCompany.com/apps/stockwatcher.swf создает общий объект portfolio, то данный общий объект не конфликтует с другим объектом portfolio, который был создан SWF-файлом на сайте www.yourCompany.com/photoshoot.swf, так как эти SWF-файлы находятся в разных каталогах.

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

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

При использовании данного метода необходимо продумать модель безопасности проигрывателя Flash Player:

Предположим, вы публикуете содержимое SWF-файла, которое должно воспроизводиться как локальные файлы (локально установленные SWF-файлы или EXE-файлы). При этом вам необходимо, чтобы определенный общий объект был доступен для нескольких локальных SWF-файлов. В этой ситуации не забудьте, что для хранения локальных общих объектов могут использоваться два разных места. Выбор используемого домена зависит от разрешений безопасности, предоставленных локальному файлу, который создал общий объект. Локальные файлы могут иметь три разных уровня полномочий (разрешений):

  1. Предоставлен доступ только к локальной файловой системе.
  2. Предоставлен доступ только к сети.
  3. Предоставлен доступ как к сети, так и локальной файловой системе.

Локальные файлы, имеющие доступ к локальной файловой системе (уровень 1 или 3), хранят свои общие объекты в одном месте. Локальные файлы, не имеющие доступа к локальной файловой системе (2 уровень), хранят свои общие объекты в другом месте.

Можно запретить использование SWF-файлом этого метода путем установки параметра allowNetworking для тегов object и embed на странице HTML, содержащей SWF-содержимое.

Дополнительные сведения по обеспечению безопасности см. в следующих источниках.

Параметры

name:String — Имя объекта. Имена могут содержать косые черты (/); например, work/addresses является допустимым именем. Имя общего объекта не может содержать пробелы или следующие символы:
  ~ % & \ ; : " ' , < > ? # 
  
 
localPath:String (default = null) — Полный или частичный путь к SWF-файлу, который создал общий объект (определяет, где будет сохранен общий объект локально). Если данный параметр не указан, используется полный путь.
 
secure:Boolean (default = false) — Определяет, имеют ли доступ к данному общему объекту только те SWF-файлы, которые были доставлены посредством подключения по протоколу HTTPS. Если SWF-файл доставляется по протоколу HTTPS, значение данного параметра оказывает следующее воздействие:
  • Если данный параметр имеет значение true, проигрыватель Flash Player создает новый защищенный общий объект или получает ссылку на существующий защищенный общий объект. Данный защищенный общий объект может считываться или записываться только теми SWF-файлами, доставленными по протоколу HTTPS, которые вызывают метод SharedObject.getLocal() с параметром secure, имеющим значение true.
  • Если данный параметр имеет значение false, проигрыватель Flash Player создает новый общий объект или получает ссылку на существующий общий объект, который может быть считан или записан SWF-файлами, доставленными посредством подключения по другому протоколу (не HTTPS).

Если ваш SWF-файл доставляется через подключение, не использующее протокол HTTPS, и вы пытаетесь установить для данного параметра значение true, то создание нового общего объекта (или доступ к ранее созданному защищенному общему объекту) завершится сбоем и возвратом значения null. Независимо от значения данного параметра созданные общие объекты добавляются к общему объему дискового пространства, доступного для домена.

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

диаграмма защищенных общих объектов

Возвращает
SharedObject — Ссылка на локальный постоянный общий объект, доступный только для текущего клиента. Если проигрыватель Flash Player не может создать или найти общий объект (например, если localPath указывает на несуществующий каталог), данный метод создает исключение.

Выдает
Error — Проигрыватель Flash Player не может создавать общие объекты без какой-либо причины. Данная ошибка может возникнуть, если запрещено создание и хранение постоянных общих объектов содержимым Flash сторонних разработчиков (это не относится к локальному содержимому). Пользователи могут запретить использование постоянных общих объектов сторонних разработчиков на панели Global Storage Settings в диспетчере настроек по адресу http://www.adobe.com/support/documentation/en/flashplayer/help/settings_manager03.html.

См. также

getRemote()метод 
public static function getRemote(name:String, remotePath:String = null, persistence:Object = false, secure:Boolean = false):SharedObject

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Возвращает ссылку на общий объект на сервере Flash Media Server, доступный нескольким клиентам. Данный метод создает удаленный общий объект, если таковой не существовал ранее.

Чтобы создать удаленный общий объект, вызовите getRemote(), а затем connect() для подключения удаленного объекта к серверу, как в следующем примере:

     var nc:NetConnection = new NetConnection();
     nc.connect("rtmp://somedomain.com/applicationName");
     var myRemoteSO:SharedObject = SharedObject.getRemote("mo", nc.uri, false);
     myRemoteSO.connect(nc);
     

Чтобы убедиться в том, что локальная и удаленная копии общего объекта синхронизированы, следует прослушать и обработать событие sync. Все клиенты, которые хотят совместно использовать этот объект, должны передать одинаковые значения для параметров name и remotePath.

Чтобы создать общий объект, который будет доступен только текущему клиенту, используйте метод SharedObject.getLocal().

Параметры

name:String — Имя удаленного общего объекта. Имена могут содержать косую черту (/); например, work/addresses является допустимым именем. Имя общего объекта не может содержать пробелы или следующие символы:
    ~ % & \ ; :  " ' , > ? ? #
 
remotePath:String (default = null) — URI-идентификатор сервера, на котором будет храниться общий объект. Данный URI-адрес должен быть идентичен URI-адресу объекта NetConnection, переданному методу connect().
 
persistence:Object (default = false) — Указывает, какое постоянство существования имеют атрибуты свойства data общего объекта: локальное, удаленное или оба варианта. Данный параметр также указывает, где будет храниться общий объект локально. Допустимы следующие значения:
  • Значение false указывает на то, что данный общий объект не имеет постоянства на клиентском компьютере или сервере.
  • Значение true указывает на то, что общий объект постоянен только на данном сервере.
  • Наличие полного или частичного локального пути к общему объекту свидетельствует о том, что общий объект имеет постоянство на клиентском компьютере и на сервере. На клиентском компьютере он хранится по указанному пути, на сервере он хранится в подкаталоге внутри каталога приложения.

Примечание. Если пользователь запретил локальное хранение для данного домена, объект не будет сохраняться локально, даже если будет указан постоянный локальный путь. Дополнительную информацию см. в описании класса.

 
secure:Boolean (default = false) — Определяет, имеют ли доступ к данному общему объекту только те SWF-файлы, которые были доставлены посредством подключения по протоколу HTTPS. Дополнительные сведения представлены в описании параметра secure в записи метода getLocal.

Возвращает
SharedObject — Ссылка на объект, который может совместно использоваться разными клиентами.

Выдает
Error — Проигрыватель Flash Player не может создать или найти общий объект. Это могло произойти, если для параметров remotePath и persistence были указаны несуществующие пути.

См. также

send()метод 
public function send(... arguments):void

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Транслирует сообщение всем клиентам, подключенным к удаленному общему объекту (включая клиента, отправляющего сообщение). Чтобы обработать и отреагировать на данное сообщение, вызовите функцию обратного вызова, прикрепленную к общему объекту.

Параметры

... arguments — Один или несколько аргументов: строка, определяющая сообщение, имя одной или нескольких функций обработчика, прикрепляемых к общему объекту, а также необязательные параметры любого типа. Имя обработчика должно быть исключительно одноуровневым (то есть, форма "родитель/дочерний объект" не используется) и связанным с общим объектом. Аргументы сериализуются и отправляются посредством подключения, при этом принимающий обработчик получает их в том же самом порядке. Если параметр представляет собой объект круглой формы (например, связанный в круглую форму список), сериализатор обрабатывает ссылки надлежащим образом.

Примечание. Не используйте в качестве имени функции какой-либо зарезервированный термин. Например, использование myRemoteSO.send("close") приведет к сбою.

setDirty()метод 
public function setDirty(propertyName:String):void

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Указывает серверу, что значение свойства в общем объекте было изменено. Данный метод помечает свойства флагом изменения dirty.

Вызовите SharedObject.setProperty(), чтобы создать свойства общего объекта.

Метод SharedObject.setProperty() реализует setDirty(). В большинстве случаев, например, когда значение свойства представлено примитивным типом (строка или число), вместо setDirty() можно вызвать setProperty(). Тем не менее, когда значением свойства является объект, содержащий свои собственные свойства, вызовите setDirty(), чтобы указать, когда значение изменяется в рамках объекта.

Параметры

propertyName:String — Имя изменившегося свойства.

См. также

setProperty()метод 
public function setProperty(propertyName:String, value:Object = null):void

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Обновляет значение свойства в общем объекте и указывает серверу, что значение свойства было изменено. Метод setProperty() отчетливо помечает свойства как измененные ("dirty").

Дополнительную информацию об удаленных общих объектах см. в документации Flash Media Server.

Примечание. Метод SharedObject.setProperty() реализует метод setDirty(). В большинстве случаев, например, когда значение свойства представлено примитивным типом (строка или число), вместо setDirty() можно вызвать setProperty(). Тем не менее, когда значением свойства является объект, содержащий свои собственные свойства, используйте setDirty(), чтобы указать, когда значение изменяется в рамках объекта. Вообще, рекомендуется вместо setDirty() вызывать setProperty(), так как setProperty() обновляет значение свойства только при изменении этого значения, в то время как setDirty() принудительно выполняет синхронизацию на всех подписанных клиентах.

Параметры

propertyName:String — Имя свойства в общем объекте.
 
value:Object (default = null) — Значение свойства (объект ActionScript) или значение null, чтобы удалить свойство.

См. также

Сведения о событии
asyncError Событие
Тип объекта события: flash.events.AsyncErrorEvent
свойство AsyncErrorEvent.type = flash.events.AsyncErrorEvent.ASYNC_ERROR

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

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

Константа AsyncErrorEvent.ASYNC_ERROR определяет значение свойства type объекта события asyncError.

Данное событие имеет следующие свойства.

СвойствоЗначение
bubblesfalse
cancelablefalse; нет поведения по умолчанию для отмены.
currentTargetОбъект, активно обрабатывающий объект Event с помощью прослушивателя событий.
targetОбъект, испытывающий сбой сетевой операции.
errorОшибка, запускаемая событием.
netStatus Событие  
Тип объекта события: flash.events.NetStatusEvent
свойство NetStatusEvent.type = flash.events.NetStatusEvent.NET_STATUS

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Отправляется, когда экземпляр SharedObject сообщает о своем состоянии или о случившейся ошибке. Событие netStatus содержит свойство info, представляющее собой информационный объект, в котором размещаются специфические сведения о событии: успешность попытки подключения или успешность записи общего объекта на локальный диск.

Задает значение свойства type для объекта события netStatus.

Данное событие имеет следующие свойства.

СвойствоЗначение
bubblesfalse
cancelablefalse; нет поведения по умолчанию для отмены.
currentTargetОбъект, активно обрабатывающий объект Event с помощью прослушивателя событий.
infoОбъект со свойствами, описывающими состояние объекта или условие ошибки.
targetОбъект NetConnection или NetStream, сообщающий свое состояние.

См. также

sync Событие  
Тип объекта события: flash.events.SyncEvent
свойство SyncEvent.type = flash.events.SyncEvent.SYNC

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Отправляется, когда удаленный общий объект обновляется сервером.

Задает значение свойства type для объекта события sync.

Данное событие имеет следующие свойства.

СвойствоЗначение
bubblesfalse
cancelablefalse; нет поведения по умолчанию для отмены.
currentTargetОбъект, активно обрабатывающий объект Event с помощью прослушивателя событий.
changeListМассив со свойствами, описывающими его состояние
targetЭкземпляр SharedObject, обновленный сервером.

См. также

Примеры Как пользоваться примерами
SharedObjectExample.as

В следующем коде создается (и при последующих выполнениях извлекается) общий объект с идентификатором application-name. Когда пользователь нажимает кнопку "Сохранить", метод saveValue() пытается сохранить свойство savedValue в свойстве data объекта SharedObject. Если Flash Player должен запросить разрешение на сохранение данных, то в тот момент, когда пользователь дает или не дает разрешение, вызывается метод onFlushStatus(). Когда нажимается кнопка "Удалить", метод clearValue() удаляет значение, сохраненное в параметре savedValue. При последующей загрузке SWF-файла извлекается значение undefined.
package {
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.events.NetStatusEvent;
    import flash.net.SharedObject;
    import flash.net.SharedObjectFlushStatus;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFieldType;
    
    public class SharedObjectExample extends Sprite {
        
        private var mySo:SharedObject;
        
        public function SharedObjectExample() {
            buildUI();
            saveBtn.addEventListener(MouseEvent.CLICK, saveValue);
            clearBtn.addEventListener(MouseEvent.CLICK, clearValue);
            
            mySo = SharedObject.getLocal("application-name");
            output.appendText("SharedObject loaded...\n");
            output.appendText("loaded value: " + mySo.data.savedValue + "\n\n");
        }

         private function saveValue(event:MouseEvent):void {
            output.appendText("saving value...\n");
            mySo.data.savedValue = input.text;
            
            var flushStatus:String = null;
            try {
                flushStatus = mySo.flush(10000);
            } catch (error:Error) {
                output.appendText("Error...Could not write SharedObject to disk\n");
            }
            if (flushStatus != null) {
                switch (flushStatus) {
                    case SharedObjectFlushStatus.PENDING:
                        output.appendText("Requesting permission to save object...\n");
                        mySo.addEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);
                        break;
                    case SharedObjectFlushStatus.FLUSHED:
                        output.appendText("Value flushed to disk.\n");
                        break;
                }
            }
            output.appendText("\n");
        }
        
        private function clearValue(event:MouseEvent):void {
            output.appendText("Cleared saved value...Reload SWF and the value should be \"undefined\".\n\n");
            delete mySo.data.savedValue;
        }
        
        private function onFlushStatus(event:NetStatusEvent):void {
            output.appendText("User closed permission dialog...\n");
            switch (event.info.code) {
                case "SharedObject.Flush.Success":
                    output.appendText("User granted permission -- value saved.\n");
                    break;
                case "SharedObject.Flush.Failed":
                    output.appendText("User denied permission -- value not saved.\n");
                    break;
            }
            output.appendText("\n");

            mySo.removeEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);
        }
        
        // UI elements
        private var inputLbl:TextField;
        private var input:TextField;
        private var output:TextField;
        private var saveBtn:Sprite;
        private var clearBtn:Sprite;
    
        private function buildUI():void {
            // input label
            inputLbl = new TextField();
            addChild(inputLbl);
            inputLbl.x = 10;
            inputLbl.y = 10;
            inputLbl.text = "Value to save:";
            
            // input TextField
            input = new TextField();
            addChild(input);
            input.x = 80;
            input.y = 10;
            input.width = 100;
            input.height = 20;
            input.border = true;
            input.background = true;
            input.type = TextFieldType.INPUT;
            
            // output TextField
            output = new TextField();
            addChild(output);
            output.x = 10;
            output.y = 35;
            output.width = 250;
            output.height = 250;
            output.multiline = true;
            output.wordWrap = true;
            output.border = true;
            output.background = true;
            
            // Save button
            saveBtn = new Sprite();
            addChild(saveBtn);
            saveBtn.x = 190;
            saveBtn.y = 10;
            saveBtn.useHandCursor = true;
            saveBtn.graphics.lineStyle(1);
            saveBtn.graphics.beginFill(0xcccccc);
            saveBtn.graphics.drawRoundRect(0, 0, 30, 20, 5, 5);
            var saveLbl:TextField = new TextField();
            saveBtn.addChild(saveLbl);
            saveLbl.text = "Save";
            saveLbl.selectable = false;
            
            // Clear button
            clearBtn = new Sprite();
            addChild(clearBtn);
            clearBtn.x = 230;
            clearBtn.y = 10;
            clearBtn.useHandCursor = true;
            clearBtn.graphics.lineStyle(1);
            clearBtn.graphics.beginFill(0xcccccc);
            clearBtn.graphics.drawRoundRect(0, 0, 30, 20, 5, 5);
            var clearLbl:TextField = new TextField();
            clearBtn.addChild(clearLbl);
            clearLbl.text = "Clear";
            clearLbl.selectable = false;
        }
    }
}