Начиная с версии 6 подключаемый Flash_модуль позволяет сохранять данные на стороне клиента с помощью класса SharedObject, которым можно управлять из
484 Глава 19. Cookies и механизм сохранения данных на стороне клиента
программного ActionScript_кода во Flash_роликах.1 Чтобы воспользоваться этим механизмом, нужно с помощью программного кода на ActionScript создать объ_ ект SharedObject примерно так, как показано ниже. Обратите внимание: для со_ храняемых данных необходимо указать имя (как и для cookie):
var so = SharedObject.getLocal("myPersistentData");
В классе SharedObject отсутствует метод load(), аналогичный методу механизма сохранения IE. Дело в том, что когда создается объект SharedObject, все данные, сохраненные ранее под указанным именем, загружаются автоматически. Все объекты SaredData имеют свойство data. Это свойство ссылается на обычный Ac_ tionScript_объект, а собственно данные доступны через свойства этого объекта. Чтобы прочитать или сохранить данные, достаточно просто прочитать или запи_ сать значения свойств объекта data:
var name = so.data.username; // Прочитать сохраненные ранее данные
so.data.favoriteColor = "red"; // Записать сохраняемые данные
В свойства объекта data можно записывать не только значения элементарных ти_ пов, такие как числа или строки, но и такие значения, например, как массивы.
Хотя объект SharedObject не имеет метода save(), зато у него есть метод flush(), который выполняет немедленное сохранение текущего состояния SharedObject. Однако вызывать этот метод совершенно не обязательно: свойства объекта data сохраняются автоматически при выгрузке Flash_ролика. Кроме того, следует от_ метить, что объект SharedObject не предоставляет возможности определить дату окончания срока действия или время жизни хранимых данных.
Имейте в виду, что весь программный код, продемонстрированный в этом разде_ ле, не является исполняемым броузером JavaScript_кодом – это ActionScript_ код, который исполняется Flash_модулем. Если вам потребуется использовать предлагаемый Flash механизм сохранения данных из JavaScript_сценариев, вам придется организовать взаимодействие между JavaScript_сценарием и Flash_мо_ дулем. Как это сделать, рассказывается в главе 23. В примере 22.12 демонстри_ руется порядок использования класса ExternalInterface (доступен в подключае_ мом Flash_модуле версии 8 или выше), который упрощает вызов ActionScript_ме_ тодов из JavaScript_сценариев. В примерах 19.3 и 19.4 демонстрируются низко_ уровневые механизмы взаимодействия между JavaScript и ActionScript. Методы GetVariable() и SetVariable() из подключаемого объекта Flash_модуля позволяют JavaScript_сценариям получать и записывать значения ActionScript_перемен_ ных, а с помощью ActionScript_функции fscommand() можно передать данные в JavaScript_сценарий.
1 Полное описание класса SharedObject и механизма сохранения данных Flash_моду_ ля вы найдете на сайте Adobe по адресу: http://www.adobe.com/support/flash/acti' on_scripts/local_shared_object/. О существовании механизма сохранения данных
на базе Flash я узнал от Бреда Ньюберга (Brad Neuberg), который впервые начал использовать его из JavaScript_сценариев в своем проекте AMASS (http://coding' inparadise.org/projects/storage/README.html). К моменту написания этих стро_ек проект продолжал свое развитие; дополнительные сведения вы можете полу_ чить на персональной странице Бреда (http://codinginparadise.org).