パッケージflash.net
public class SharedObject
継承SharedObject Inheritance EventDispatcher Inheritance Object

SharedObject クラスは、ユーザーのコンピュータまたはサーバー上で限定された量のデータを読み込みおよび格納するために使用されます。共有オブジェクトを使用すると、ローカルコンピュータまたはリモートサーバー上に永続化されている SWF ファイルとオブジェクト間で、リアルタイムでデータを共有することができます。ローカル共有オブジェクトはブラウザのクッキーに似ており、リモート共有オブジェクトはリアルタイムデータ転送デバイスに似ています。リモート共有オブジェクトを使用するには、Adobe Flex または Adobe の Macromedia Flash Media Server 2 などのサーバーが必要です。

NetStream クラスのプロパティやメソッドの中には、主に Flash Media Server 2 や Flex などのサーバーで使用することを目的としたものがあります。これらのプロパティとメソッドには、サーバーサイド機能を追加できます。詳細については、 Flash Media Server マニュアルの「NetStream class」を参照してください。

次に、共有オブジェクトの 3 つの一般的な使用方法を説明します。

ローカル共有オブジェクトを作成するには、次のシンタックスを使用します。

 var so:SharedObject = SharedObject.getLocal("userHighScore");
 so.data.highScore = new Number(1234567890);
 so.flush();
 

この例では、共有オブジェクトがディスクに明示的に保存または書き込まれています。アプリケーションが閉じると、共有オブジェクトは自動的に保存されますが、データをディスクに書き込む手順を示すため、保存したオブジェクトはここに表示されます。

ローカルディスク領域についての考慮事項 : ローカル共有オブジェクトは非常に役に立ちますが、アプリケーションの設計時に考慮する必要があるいくつかの制限があります。SWF ファイルでローカル共有オブジェクトの書き込みが許可されない場合があります。ローカル共有オブジェクトに格納されているデータが、わからないうちに削除される場合もあります。Flash Player のユーザーは、個々のドメインまたはすべてのドメインで使用できるディスク領域を管理できます。ユーザーが使用可能なディスク領域の量を減らすと、一部のローカル共有オブジェクトが削除される可能性があります。Flash Player のユーザーには、サードパーティドメイン (現在のブラウザのアドレスバーにあるドメイン以外のドメイン) によるローカル共有オブジェクトの読み取りまたは書き込みを防止できるプライバシーコントロール機能もあります。

メモ:リモートサーバーではなくローカルコンピュータで格納および実行される SWF ファイルは、ディスクへのサードパーティによる共有オブジェクトの書き込みを許可していない場合でも、常にディスクにサードパーティの共有オブジェクトを書き込むことができます。サードパーティの共有オブジェクトの詳細については、Flash Player のヘルプの「グローバル記憶領域の設定パネル」にあるサードパーティコンテンツに関する説明を参照してください。

ディスク領域の量とユーザーのプライバシーコントロールに関する失敗についてチェックすることをお勧めします。getLocal() および flush() の呼び出し時にこれらのチェックを実行します。

SWF ファイルでローカル共有オブジェクトを作成または変更しようとする場合、SWF ファイルの幅が最低でも 215 ピクセル、高さが最低でも 138 ピクセルあることを確認してください。このサイズは、ダイアログボックス (ローカル共有オブジェクトの記憶域制限を増やすかどうかをユーザーに確認する) を表示するための最小の大きさです。SWF ファイルがこの大きさよりも小さく、記憶域制限を増やす必要がある場合、SharedObject.flush() は失敗し、SharedObjectFlushedStatus.PENDING を返し、netStatus イベントを送出します。

例の表示

関連項目

flush()
getLocal()
netStatus


パブリックプロパティ
 プロパティ定義
  client : Object
コールバックメソッドが呼び出されるオブジェクトを示します。
SharedObject
 Inheritedconstructor : Object
特定のオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。
Object
  data : Object
[read-only] オブジェクトの data プロパティに割り当てられた属性のコレクションです。これらの属性は共有および保存することができます。
SharedObject
  defaultObjectEncoding : uint
[static] SWF ファイルで作成されたすべてのローカル共有オブジェクトのデフォルトオブジェクトのエンコード (AMF バージョン)です。
SharedObject
  fps : Number
[write-only] 共有オブジェクトに対するクライアントの変更がサーバーに送信される回数 (1 秒あたり) を指定します。
SharedObject
  objectEncoding : uint
この共有オブジェクトのエンコード (AMF バージョン)です。
SharedObject
 Inheritedprototype : Object
[static] クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。
Object
  size : uint
[read-only] 共有オブジェクトの現在のサイズ (バイト数)です。
SharedObject
パブリックメソッド
 メソッド定義
 InheritedaddEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。
EventDispatcher
  clear():void
ローカル共有オブジェクトの場合、すべてのデータを消去し、共有オブジェクトをディスクから削除します。
SharedObject
  close():void
リモート共有オブジェクトとサーバーとの間の接続を閉じます。
SharedObject
  connect(myConnection:NetConnection, params:String = null):void
指定された接続を介して、サーバー上のリモート共有オブジェクトに接続します。
SharedObject
 InheriteddispatchEvent(event:Event):Boolean
イベントをイベントフローに送出します。
EventDispatcher
  flush(minDiskSpace:int = 0):String
ローカルに作成された共有オブジェクトをただちにローカルファイルに書き込みます。
SharedObject
  getLocal(name:String, localPath:String = null, secure:Boolean = false):SharedObject
[static] 現在のクライアントだけが利用できるローカル共有オブジェクトへの参照を返します。
SharedObject
  getRemote(name:String, remotePath:String = null, persistence:Object = false, secure:Boolean = false):SharedObject
[static] 何らかのサーバー (Flash Media Server など) によって複数クライアントでの共有ができるオブジェクトへの参照を返します。
SharedObject
 InheritedhasEventListener(type:String):Boolean
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。
EventDispatcher
 InheritedhasOwnProperty(name:String):Boolean
オブジェクトに指定されたプロパティが定義されているかどうかを示します。
Object
 InheritedisPrototypeOf(theClass:Object):Boolean
Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。
Object
 InheritedpropertyIsEnumerable(name:String):Boolean
指定されたプロパティが存在し、列挙可能かどうかを示します。
Object
 InheritedremoveEventListener(type:String, listener:Function, useCapture:Boolean = false):void
EventDispatcher オブジェクトからリスナーを削除します。
EventDispatcher
  send(... arguments):void
指定されたリモート共有オブジェクトに接続しているすべてのクライアント (メッセージを送信したクライアントも含む) に、メッセージをブロードキャストします。
SharedObject
  setDirty(propertyName:String):void
共有オブジェクトのプロパティの値 (data プロパティで定義) が変更されたことをサーバーに通知します。
SharedObject
  setProperty(propertyName:String, value:Object = null):void
共有オブジェクトのプロパティの値 (data プロパティで定義) を更新し、サーバーにプロパティの値が変更されたことを示します。
SharedObject
 InheritedsetPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
ループ処理に対するダイナミックプロパティの可用性を設定します。
Object
 InheritedtoString():String
指定されたオブジェクトのストリング表現を返します。
Object
 InheritedvalueOf():Object
指定されたオブジェクトのプリミティブ値を返します。
Object
 InheritedwillTrigger(type:String):Boolean
指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。
EventDispatcher
イベント
 イベント一覧定義
  asyncError 非同期形式で、つまりネイティブ非同期コードから例外がスローされると送出されます。SharedObject
  netStatus SharedObject インスタンスが、そのステータスまたはエラーの状況をレポートするときに送出されます。SharedObject
  sync リモート共有オブジェクト (SharedObject) がサーバーによって更新されるときに送出されます。SharedObject
プロパティの詳細
clientプロパティ
client:Object  [read-write]

コールバックメソッドが呼び出されるオブジェクトを示します。デフォルトのオブジェクトは this です。Client プロパティを別のオブジェクトに設定し、コールバックメソッドをその別のオブジェクトで呼び出すことができます。

実装
    public function get client():Object
    public function set client(value:Object):void

Throws
TypeError client プロパティは、null 以外のオブジェクトに設定する必要があります。
dataプロパティ 
data:Object  [read-only]

オブジェクトの data プロパティに割り当てられた属性のコレクションです。これらの属性は共有および保存することができます。それぞれの属性は、ActionScript または JavaScript タイプのオブジェクトです。たとえば、Array、Number、Boolean、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
  

メモ:so.data = someValue というように、共有オブジェクトの data プロパティに値を直接割り当てないでください。このような割り当ては無視されます。

ローカル共有オブジェクトの属性を削除するには、delete so.data.attributeName というコードを使用します。ローカル共有オブジェクトの属性を null または undefined に設定しても属性は削除されません。

共有オブジェクトのプライベート値 (オブジェクトの使用中にそのクライアントインスタンスでのみ利用でき、閉じるときにオブジェクトと共に保存されない値) を作成するには、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]
  
実装
    public function get data():Object

関連項目

defaultObjectEncodingプロパティ 
defaultObjectEncoding:uint  [read-write]

SWF ファイルで作成されたすべてのローカル共有オブジェクトのデフォルトオブジェクトのエンコード (AMF バージョン)です。ローカル共有オブジェクトがディスクに書き込まれると、SharedObject.defaultObjectEncoding プロパティは、使用する必要のある Action Message Format バージョンを示します。ActionScript 3.0 フォーマット (AMF3) または ActionScript 1.0 または 2.0 フォーマット (AMF0) です。

ローカル共有オブジェクトとリモート共有オブジェクトのエンコードの違いを含む、オブジェクトエンコードの詳細については、objectEncoding プロパティの説明を参照してください。

SharedObject.defaultObjectEncoding のデフォルト値は、ActionScript 3.0 フォーマット、AMF3 を使用するように設定されます。ActionScript 2.0 または 1.0 SWF ファイルで読み込めるローカル共有オブジェクトの書き込みが必要な場合は、ローカル共有オブジェクトを作成する前に、スクリプトの先頭部分で ActionScript 1.0 または ActionScript 2.0 フォーマット flash.net.ObjectEncoding.AMF0 を使用するよう SharedObject.defaultObjectEncoding を設定します。それ以降に作成されるすべてのローカル共有オブジェクトで、AMF0 エンコーディングが使用され、古いコンテンツとやり取りできるようになります。ローカル共有オブジェクトの作成後に、SharedObject.defaultObjectEncoding を設定しても、既存のローカル共有オブジェクトの objectEncoding 値は変更できません。

SWF で作成したすべての共有オブジェクトに対してではなく、オブジェクトごとにオブジェクトのエンコーディングを設定するには、ローカル共有オブジェクトの objectEncoding プロパティを設定します。

実装
    public static function get defaultObjectEncoding():uint
    public function set defaultObjectEncoding(value:uint):void

関連項目

fpsプロパティ 
fps:Number  [write-only]

共有オブジェクトに対するクライアントの変更がサーバーに送信される回数 (1 秒あたり) を指定します。

クライアントとサーバー間のトラフィック量を制限する場合に、このメソッドを使用します。たとえば、クライアントとサーバー間の接続がやや遅い場合は、fps をやや小さめの値に設定するとよいでしょう。逆に、クライアントが、タイミングが重要なマルチユーザーアプリケーションに接続している場合は、fps をやや大きめの値に設定するとよいでしょう。

更新の送信時に手動で制御する場合、変更をサーバーに送る場合は fps を 0 に設定します。たとえば、ユーザーがサーバーに更新を送るボタンを押すようにする場合は、ボタンに myRemoteSharedObject.fps(0) を追加します。

fps に渡す値に関わらず、sync 実装
    public function set fps(value:Number):void

objectEncodingプロパティ 
objectEncoding:uint  [read-write]

この共有オブジェクトのエンコード (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

Throws
ReferenceError — リモート共有オブジェクトの objectEncoding プロパティの値を設定しようとしました。このプロパティの値は、関連付けられた NetConnection インスタンスにより決定されるため、リモート共有オブジェクトの読み取り専用です。

関連項目

sizeプロパティ 
size:uint  [read-only]

共有オブジェクトの現在のサイズ (バイト数)です。

すべてのデータプロパティを順に確認することによって、共有オブジェクトのサイズが計算されます。オブジェクトが持つデータプロパティが多いほど、サイズの計算に時間がかかります。オブジェクトのサイズを調べる処理は、非常に時間がかかる場合があり、特に必要がない限り、このメソッドの使用を避けることができます。

実装
    public function get size():uint

関連項目



次のコードでは、ID "thehobbit" を使用して ShareObject オブジェクトを作成します。 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

ローカル共有オブジェクトの場合、すべてのデータを消去し、共有オブジェクトをディスクから削除します。共有オブジェクトへの参照はアクティブなままで、そのデータプロパティが削除されます。

リモート共有オブジェクトの場合、このメソッドは、オブジェクトを切断し、すべてのデータを消去します。共有オブジェクトがローカルに永続化されている場合、このメソッドはディスクから共有オブジェクトも削除します。共有オブジェクトへの参照はアクティブなままで、そのデータプロパティが削除されます。



次のコードでは、 hostName の値と ID を使用して、ShareObject オブジェクトが作成 (以降の実行では取得) されます。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

リモート共有オブジェクトとサーバーとの間の接続を閉じます。リモート共有オブジェクトがローカルに永続化されている場合、ユーザーはこのメソッドの呼び出し後に、オブジェクトのローカルコピーを変更できます。ローカルオブジェクトの変更は、次回にユーザーがリモート共有オブジェクトに接続したときに、サーバーに送られます。

connect()メソッド 
public function connect(myConnection:NetConnection, params:String = null):void

指定された接続を介して、サーバー上のリモート共有オブジェクトに接続します。このメソッドは SharedObject.getRemote() の発行後に使用します。接続が成功すると、sync イベントが送出されます。

リモート共有オブジェクトを使用する前に、まず接続の成功を示す true の戻り値をチェックし、sync イベントが送出されるまで待機します。これを行わないと、sync イベントが送出される前に、ローカルで行ったオブジェクトの変更が失われる可能性があります。

メモ:この呼び出しが false を返した場合、sync イベントは送出されません。

パラメータ
myConnection:NetConnection — RTMP (Real-Time Messaging Protocol) を使用している NetConnection オブジェクト (Flash Media Server との通信に使用されるオブジェクトなど)です。
 
params:String (default = null)

スロー
Error — Flash Player は、指定されたリモート共有オブジェクトに接続できません。NetConnection インスタンスが有効であり接続されていること、リモート共有オブジェクトがサーバーに正常に作成されたことを確認します。

関連項目

flush()メソッド 
public function flush(minDiskSpace:int = 0):String

ローカルに作成された共有オブジェクトをただちにローカルファイルに書き込みます。このメソッドを使用しない場合、共有オブジェクトがファイルに書き込まれるのは、そのオブジェクトのセッションが終了した時点となります。つまり、その SWF ファイルが閉じる時点か、その共有オブジェクトに対する参照がなくなってガベージコレクションされる時点、または SharedObject.clear() または SharedObject.close() が呼び出された時点のいずれかです。

このメソッドが SharedObjectFlushStatus.PENDING を返した場合は、Flash Player では、このドメインからのオブジェクトを保存するためのディスク領域を増やすように求めるダイアログボックスが表示されます。将来的に共有オブジェクトを保存する際に、領域が自動的に拡張されるようにする (PENDING が返されないようにする) には、minDiskSpace に値を指定します。ファイルにオブジェクトを書き込む際には、現在のサイズの共有オブジェクトを保存するために十分な領域だけではなく、minDiskSpace に指定したバイト数が確認されます。

たとえば、共有オブジェクトが最初は小さくても後から最大で 500 バイトまで増えると予想される場合には、minDiskSpace に 500 を指定します。ユーザーに対して共有オブジェクトへのディスク領域の割り当てを求める際には、500 バイトの領域が要求されます。要求されたディスク領域をユーザーが割り当てた場合、それ以降、オブジェクトのサイズが 500 バイトを超えない限り、オブジェクトを保存する際に追加のディスク領域を要求されることはありません。

ユーザーがこのダイアログボックスに応答した後、このメソッドがもう一度呼び出され、netStatus イベントが、SharedObject.Flush.Success または SharedObject.Flush.Failedcode プロパティを使用して送出されます。

パラメータ
minDiskSpace:int (default = 0) — このオブジェクトに割り当てる必要のある最小ディスク領域 (バイト単位) です。

戻り値
String — 次のいずれかの値になります。
  • SharedObjectFlushStatus.PENDING: ユーザーはこのドメインからのオブジェクトに対してローカル情報記憶域を許可していますが、割り当てられた領域がオブジェクトを保存するのに十分でありません。Flash Player はユーザーに領域を増やすように要求します。
  • SharedObjectFlushStatus.FLUSHED: 共有オブジェクトはローカルディスク上のファイルに正常に書き込まれました。

スロー
Error — Flash Player は、共有オブジェクトをディスクに書き込むことができません。このエラーは、ユーザーがこのドメインからのオブジェクトに対して永続的にローカル情報記憶域を許可されていない場合に発生する可能性があります。

メモ: ディスクへのサードパーティの共有オブジェクトの書き込みを許可していない場合でも、ローカルコンテンツでは、常にサードパーティドメイン (現在のブラウザのアドレスバーにあるドメイン以外のドメイン) からの共有オブジェクトをディスクに書き込むことができます。

関連項目



次のコードでは、 hostName の値と ID を使用して、ShareObject オブジェクトが作成 (以降の実行では取得) されます。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

現在のクライアントだけが利用できるローカル共有オブジェクトへの参照を返します。共有オブジェクトがまだ存在しない場合は、このメソッドにより作成されます。getLocal() に渡された値が無効である場合、または呼び出しに失敗する場合は、Flash Player は例外をスローします。

次のコードでは、返された共有オブジェクトの参照の変数への割り当て方法を示します。

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

メモ:ユーザーがこのドメインに対してローカル記憶域を許可しない場合は、localPath が指定されていても、オブジェクトはローカルに保存されません。ただし、ローカルコンテンツは例外です。ディスクへのサードパーティの共有オブジェクトの書き込みを許可していない場合でも、ローカルコンテンツでは、常にサードパーティドメイン (現在のブラウザのアドレスバーにあるドメイン以外のドメイン) からの共有オブジェクトをディスクに書き込むことができます。

名前のコンフリクトを避けるために、共有オブジェクトを作成している SWF ファイルの位置が考慮されます。たとえば、www.myCompany.com/apps/stockwatcher.swf にある SWF ファイルが portfolio という名前の共有オブジェクトを作成した場合、この共有オブジェクトは、www.yourCompany.com/photoshoot.swf にある SWF ファイルが作成した portfolio という別のオブジェクトとは競合しません。これは、この 2 つの SWF ファイルが異なるディレクトリに置かれているからです。

localPath パラメータはオプションですが、慎重に使用する必要があります。特に、他の SWF ファイルが共有オブジェクトにアクセスしなければならない場合には注意してください。共有オブジェクトのデータが、別の場所に移動されない 1 つの SWF ファイルに固有のものである場合は、デフォルト値を使用することをお勧めします。他の SWF ファイルが共有オブジェクトにアクセスする必要がある場合、または共有オブジェクトを作成する SWF ファイルを後で移動する場合には、このパラメータの値により、共有オブジェクトへのアクセスに影響が生じます。たとえば、localPath を SWF ファイルへの完全パスのデフォルト値に設定し、共有オブジェクトを作成すると、他の SWF ファイルは共有オブジェクトにアクセスできません。元の SWF ファイルを後で別の場所に移動すると、その SWF ファイルからも、共有オブジェクトに格納されているデータにアクセスできなくなります。

共有オブジェクトへのアクセスを誤って制限してしまうのを避けるには、localpath パラメータを使用します。最も制限の緩やかな方法は、localPath/ (スラッシュ) に設定する方法です。ドメインのすべての SWF ファイルが共有オブジェクトを利用できますが、ドメイン内の他の共有オブジェクトとの名前のコンフリクトが起こりやすくなります。より制限の厳しい方法は、localPath に SFW ファイルへの完全パス内のフォルダ名を付加する方法です。たとえば、www.myCompany.com/apps/stockwatcher.swf にある SWF ファイルで作成された portfolio 共有オブジェクトの場合は、localPath パラメータを //apps、または /apps/stockwatcher.swf に設定できます。アプリケーションに最適な柔軟性を提供できる方法がどれかを判断する必要があります。

このメソッドを使用するときは、Flash Player セキュリティモデルを考慮してください。

ローカルファイル (ローカルにインストールされた SWF ファイルまたは EXE ファイル) として再生する SWF ファイルコンテンツをパブリッシュし、複数のローカル SWF ファイルから特定の共有オブジェクトにアクセスする必要があるとします。この状況では、ローカルファイルでは共有オブジェクトの保存に 2 つの異なる場所が使用されることがあるので注意してください。使用されるドメインは、共有オブジェクトを作成したローカルファイルに付与されるセキュリティ許可によって変わります。ローカルファイルには、次の 3 つの異なる許可レベルを設定できます。

  1. ローカルファイルシステムのみに対するアクセス
  2. ネットワークのみに対するアクセス
  3. ネットワークとローカルファイルシステムの両方に対するアクセス

ローカルファイルシステムへのアクセス権を持つローカルファイル (レベル 1 または 3) は、共有オブジェクトを 1 つの場所に格納します。ローカルファイルシステムへのアクセス権を持たないローカルファイル (レベル 2) は、共有オブジェクトを別の場所に格納します。

詳細については、次のトピックを参照してください。

パラメータ
name:String — オブジェクト名です。名前にはスラッシュ (/) を含めます。たとえば、work/addresses は有効な名前です。共有オブジェクト名にスペース、および以下の文字を含めることはできません。
  ~ % & \ ; : " ' , < > ? # 
  
 
localPath:String (default = null) — 共有オブジェクトを作成した SWF ファイルの完全パスまたは部分パスです。これによって、共有オブジェクトをローカルに保存する場所が決まります。このパラメータを指定しない場合は、完全パスが使用されます。
 
secure:Boolean (default = false) — この共有オブジェクトへのアクセスが HTTPS 接続経由で配布された SWF ファイルに限定されているかどうかを判別します。SWF ファイルが HTTPS 接続経由で配布されている場合、このパラメータの値には、次のエフェクトがあります。
  • このパラメータを true に設定すると、Flash Player は新しいセキュアな共有オブジェクトを作成するか、既存のセキュアな共有オブジェクトの参照を取得します。このセキュアな共有オブジェクトは、HTTPS 経由で配信される SWF ファイルからのみ読み取るか、またはこの SWF ファイルにのみ書き込むことができ、true に設定された secure パラメータを持つ SharedObject.getLocal() を呼び出します。
  • このパラメータが false に設定されている場合は、Flash Player は共有オブジェクトを新しく作成するか、または HTTPS 以外の接続で配布された SWF ファイルにより読み込みまたは書き込みのできる既存の共有オブジェクトに対する参照を取得します。

SWF ファイルが HTTPS 以外の接続経由で配信される場合、このパラメータを true に設定しようとすると、新しい共有オブジェクトの作成 (または作成済みのセキュアな共有オブジェクトへのアクセス) は失敗し、null が返されます。このパラメータの値にかかわらず、作成された共有オブジェクトは、各ドメインに割り当てられた総ディスク容量の一部を使用します。

次の図に、secure パラメータの使用方法を示します。

戻り値
SharedObject — ローカルに永続化され、現在のクライアントでのみ利用できる共有オブジェクトへの参照です。共有オブジェクトを作成できない場合、または共有オブジェクトが見つからない場合 (localPath に指定したディレクトリが存在しない場合など) は、このメソッドにより例外がスローされます。

スロー
Error — Flash Player は、何らかの理由で共有オブジェクトを作成できません。サードパーティの Flash コンテンツによる永続共有オブジェクトの作成と保存が禁止されている (ローカルコンテンツに適用されない) 場合、このエラーが発生することがあります。ユーザーは、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

何らかのサーバー (Flash Media Server など) によって複数クライアントでの共有ができるオブジェクトへの参照を返します。共有オブジェクトがまだ存在しない場合は、このメソッドにより作成されます。

次のコードでは、返された共有オブジェクトの参照の変数への割り当て方法を示します。

var myRemote_so:SharedObject = SharedObject.getRemote(name, remotePath, persistence);

現在のクライアントでのみ利用できる共有オブジェクトを作成するには、SharedObject.getLocal() を使用します。

次のコードに示すように、このメソッドの呼び出し後に SharedObject.connect() を使用して、オブジェクトをアプリケーションサーバーに接続します。

     var myNC:NetConnection = new NetConnection();
     myNC.connect("rtmp://[yourDomain].com/applicationName");
     var myRemoteSO:SharedObject = SharedObject.getRemote("mo", myNC.uri, false);
     myRemoteSO.connect(myNC);
     

共有オブジェクトのローカルおよびリモートコピーを同期させるには、sync イベントを使用します。

このオブジェクトを共有するすべてのクライアントは、name パラメータと remotePath パラメータに同じ値を渡す必要があります。リモート共有オブジェクトの詳細については、Flash Media Server のマニュアルの SharedObject.getRemote() を参照してください。

パラメータ
name:String — オブジェクト名です。名前にはスラッシュ (/) を含めます。たとえば、work/addresses は有効な名前です。共有オブジェクト名にスペース、および以下の文字を含めることはできません。
~ % & \ ; :  " ' , > ? ? #
 
remotePath:String (default = null) — 共有オブジェクトが保存されるサーバーの URIです。この URI は、SharedObject.connect() メソッドに渡された NetConnection オブジェクトの URI と同一である必要があります。
 
persistence:Object (default = false) — 共有オブジェクトのデータプロパティの属性が、どこで永続的になっているか (ローカル、リモート、またはその両方) を指定します。このパラメータでは、共有オブジェクトをローカルで保存する場合の場所も指定できます。有効な値は次のとおりです。
  • false 値は、共有オブジェクトがクライアントまたはサーバーで永続的ではないことを指定します。
  • true 値は、共有オブジェクトがサーバー上のみで永続的であることを指定します。
  • 共有オブジェクトへのローカルの完全パスまたは部分パスは、共有オブジェクトがクライアントとサーバー上で永続的であることを示します。クライアントでは、共有オブジェクトは指定されたパスに保存されます。サーバー上では、アプリケーションディレクトリ内のサブディレクトリに保存されます。

メモ:ユーザーがこのドメインに対してローカル記憶域を許可しない場合は、ローカルパスが指定されていても、オブジェクトはローカルに保存されません。詳細については、クラスの説明を参照してください。

 
secure:Boolean (default = false) — この共有オブジェクトへのアクセスが HTTPS 接続経由で配布された SWF ファイルに限定されているかどうかを判別します。詳細については、getLocal メソッドエントリの secure パラメータの説明を参照してください。

戻り値
SharedObject — 複数クライアントでの共有ができるオブジェクトへの参照です。

スロー
Error — Flash Player は、共有オブジェクトを作成できません、または見つけられません。これは、remotePath パラメータと persistence パラメータに存在しないパスが指定されている場合に起こります。

関連項目

send()メソッド 
public function send(... arguments):void

指定されたリモート共有オブジェクトに接続しているすべてのクライアント (メッセージを送信したクライアントも含む) に、メッセージをブロードキャストします。メッセージを処理し応答するには、共有オブジェクトに送信するハンドラ関数を作成します。

パラメータ
... arguments — 複数の引数 :メッセージを識別するストリング、共有オブジェクトに割り当てる複数のハンドラ関数名、および任意のデータ型を指定できるオプションのパラメータです。それらは直列化され、接続を介して送信されます。受信側のハンドラは同じ順番でそれらを受け取ります。パラメータが循環オブジェクト (循環するリンクされたリストなど) である場合、シリアライザは参照を正しく処理します。

メモ:関数名には予約語を使用しないでください。たとえば、myRemoteSO.send("close") は失敗します。

setDirty()メソッド 
public function setDirty(propertyName:String):void

共有オブジェクトのプロパティの値 (data プロパティで定義) が変更されたことをサーバーに通知します。このメソッドは、プロパティを変更済み (ダーティ) としてマークし、サーバーサイド ActionScript で使用します。

共有オブジェクトのプロパティを作成するには、SharedObject.data プロパティを使用するか、単純に SharedObject プロパティという一意の名前を付けた新しいプロパティを作成します。これらの 2 つの方法の違いの詳細については、SharedObject.data プロパティを参照してください。

SharedObject.setProperty() メソッドには、setDirty() メソッドが実装されています。ほとんどの場合、たとえばプロパティの値がストリングや数値などのプリミティブ型の場合などは、setDirty() ではなく、setProperty() を使用します。ただし、プロパティの値が独自のプロパティを持つオブジェクトである場合は、setDirty() を使用してオブジェクト内の値が変更された日時を示します。

パラメータ
propertyName:String — 変更されたプロパティの名前です。

関連項目

setProperty()メソッド 
public function setProperty(propertyName:String, value:Object = null):void

共有オブジェクトのプロパティの値 (data プロパティで定義) を更新し、サーバーにプロパティの値が変更されたことを示します。setProperty() メソッドは、プロパティを変更済み (ダーティ) として明示的にマークし、サーバーサイド ActionScript で使用します。Flash Media Server などのサーバーには、setProperty() を明示的に呼び出して、共有オブジェクトのプロパティが変更された日時を示す必要があるものもあります。

SharedObject.setProperty() をサーバーサイドで呼び出した場合、共有オブジェクトを使用しているすべての Flash Player クライアントに対して、クライアントサイドで sync イベントを通じて変更通知が呼び出されます。サーバーサイドの propertyName パラメータは、クライアントサイドの data プロパティの属性と同じです。たとえば、次のコード行はすべて同じです。最初の 2 行はサーバーサイド ActionScript で、3、4 行目はクライアントサイド ActionScript です。

  setProperty("nameVal", "foo");
  setDirty("nameVal");
  data["nameVal"] = "foo";
  data.nameVal = "foo";
  

Flash Media Server のユーザーは、「 Flash Media Server Server-Side ActionScript Language Reference」で、サーバーサイド ActionScript およびリモート共有オブジェクトに関する詳細を参照できます。

メモ:SharedObject.setProperty() メソッドには、setDirty() メソッドが実装されています。ほとんどの場合、たとえばプロパティの値がストリングや数値などのプリミティブ型の場合などは、setDirty ではなく、setProperty() を使用します。ただし、プロパティの値が独自のプロパティを持つオブジェクトである場合は、setDirty() を使用してオブジェクト内の値が変更された日時を示します。一般的に、setDirty() ではなく setProperty() を呼び出すことをお勧めします。これは、setDirty() はサブスクライブしているすべてのクライアントに対して強制的に同期させますが、setProperty() は値が変更されたときのみプロパティ値を更新するためです。

パラメータ
propertyName:String — 共有オブジェクトのプロパティの名前です。
 
value:Object (default = null) — プロパティの値 (ActionScript オブジェクト)、またはプロパティを削除する null です。

関連項目

イベントの詳細
asyncErrorevent 
イベントオブジェクトの型: flash.events.AsyncErrorEvent
AsyncErrorEvent.type property = flash.events.AsyncErrorEvent.ASYNC_ERROR

非同期形式で、つまりネイティブ非同期コードから例外がスローされると送出されます。

AsyncErrorEvent.ASYNC_ERROR 定数は、asyncError イベントオブジェクトの type プロパティ値を定義します。

このイベントには、次のプロパティがあります。

プロパティ
bubblesfalse
cancelablefalse は、キャンセルするデフォルトの動作がないことを示します。
currentTargetイベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。
targetネットワーク操作エラーが発生したオブジェクトです。
errorイベントをトリガしたエラーです。
netStatusevent  
イベントオブジェクトの型: flash.events.NetStatusEvent
NetStatusEvent.type property = flash.events.NetStatusEvent.NET_STATUS

SharedObject インスタンスが、そのステータスまたはエラーの状況をレポートするときに送出されます。netStatus イベントには、info プロパティが含まれます。このプロパティは、接続試行が成功したかどうかや共有オブジェクトがローカルディスクへの書き込みに成功したかどうかなど、イベントに関する特定の情報を含む情報オブジェクトです。

netStatus イベントオブジェクトの type プロパティの値を定義します。

このイベントには、次のプロパティがあります。

プロパティ
bubblesfalse
cancelablefalse は、キャンセルするデフォルトの動作がないことを示します。
currentTargetイベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。
infoオブジェクトのステータスまたはエラー状態を記述するプロパティを持つオブジェクトです。
targetそのステータスをレポートする NetConnection または NetStream オブジェクトです。

関連項目

syncevent  
イベントオブジェクトの型: flash.events.SyncEvent
SyncEvent.type property = flash.events.SyncEvent.SYNC

リモート共有オブジェクト (SharedObject) がサーバーによって更新されるときに送出されます。

sync イベントオブジェクトの type プロパティの値を定義します。

このイベントには、次のプロパティがあります。

プロパティ
bubblesfalse
cancelablefalse は、キャンセルするデフォルトの動作がないことを示します。
currentTargetイベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。
changeList配列のステータスを記述するプロパティを持つ配列です。
targetサーバーによって更新された SharedObject インスタンスです。

関連項目


次のコードでは、 ID "application-name" を使用して、共有オブジェクトが作成 (以降の実行では取得) されます。[保存] ボタンをクリックすると、 saveValue() メソッドは savedValue というプロパティを SharedObject オブジェクトの data プロパティに保存しようとします。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;
        }
    }
}