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

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

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

共有オブジェクトを使用して次の操作を行います。

ローカル共有オブジェクトを作成するには、SharedObject.getLocal() () を呼び出します。リモート共有オブジェクトを作成するには、SharedObject.getRemote() () を呼び出します。

アプリケーションを閉じると、共有オブジェクトが保存されます。つまり、ディスクに書き込まれます。また、flush() メソッドを呼び出して、データを明示的にディスクに書き込むこともできます。

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

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

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

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

リモート共有オブジェクト。 Flash Media Server では、アプリケーションに接続しているすべてのクライアントがリアルタイムで共有する、リモート共有オブジェクトを作成および使用できます。あるクライアントがリモート共有オブジェクトのプロパティを変更すると、接続しているすべてのクライアントのプロパティが変更されます。リモート共有オブジェクトを使用すると、例えば、マルチプレーヤーゲームのユーザーなどのクライアントを同期できます。

各リモート共有オブジェクトに data プロパティがあります。これは、データを格納するプロパティを持つオブジェクトです。setProperty() を呼び出して、データオブジェクトのプロパティを変更します。サーバーは、プロパティを更新し、sync イベントを送出し、接続しているクライアントにプロパティを返送します。

クライアント、サーバー、またはその両方のリモート共有オブジェクトを永続化できます。デフォルトでは、サイズが最大 100K の永続的なリモート共有オブジェクトがローカルに保存されます。大きなオブジェクトを保存しようとすると、[ローカル記憶領域] ダイアログボックスが表示されます。このダイアログボックスでは、ユーザーが共有オブジェクト用のローカル記憶域の使用を許可または拒否できます。ステージのサイズは必ず 215 × 138 ピクセル以上に設定してください。これは、ダイアログボックスを表示するために必要な最小サイズです。

ユーザーが [許可] をクリックすると、サーバーに共有オブジェクトが保存され、netStatus イベントが送出されます。このときの code プロパティは SharedObject.Flush.Success です。ユーザーが [拒否] を選択すると、サーバーに共有オブジェクトは保存されず、netStatus イベントが送出されます。このときの code プロパティは SharedObject.Flush.Failed です。

例を表示

関連項目

flush()
getLocal()
netStatus


パブリックプロパティ
 プロパティ定義元
  client : Object
コールバックメソッドが呼び出されるオブジェクトを示します。
SharedObject
 Inheritedconstructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。
Object
  data : Object
[読み取り専用] オブジェクトの data プロパティに割り当てられた属性のコレクションです。これらの属性は共有および保存することができます。
SharedObject
  defaultObjectEncoding : uint
[静的] SWF ファイルで作成されたすべてのローカル共有オブジェクトのデフォルトのオブジェクトエンコード (AMF バージョン) です。
SharedObject
  fps : Number
[書き込み専用] 共有オブジェクトに対するクライアントの変更がサーバーに送信される回数 (1 秒あたり) を指定します。
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 または AIR アプリケーションがオペレーティングシステムのフォーカスを取得して、アクティブになったときに送出されます。EventDispatcher
  非同期形式で、つまりネイティブ非同期コードから例外がスローされると送出されます。SharedObject
 Inherited[ブロードキャスト イベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを失って、非アクティブになったときに送出されます。EventDispatcher
  SharedObject インスタンスが、そのステータスまたはエラーの状況をレポートするときに送出されます。SharedObject
  リモート共有オブジェクトがサーバーによって更新されるときに送出されます。SharedObject
プロパティの詳細
clientプロパティ
client:Object

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

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



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

例外
TypeError client プロパティは、null 以外のオブジェクトに設定する必要があります。
dataプロパティ 
data:Object  [読み取り専用]

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

オブジェクトの 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
     

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

ローカル共有オブジェクトの属性を削除するには、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]
     

サーバーで使用されるリモート共有オブジェクトの場合、共有オブジェクトに接続しているすべてのクライアントが data プロパティのすべての属性を利用可能で、そのオブジェクトが永続化されている場合、すべての属性が保存されます。あるクライアントが属性の値を変更すると、すべてのクライアントに新しい値が表示されます。



実装
    public function get data():Object

関連項目

defaultObjectEncodingプロパティ 
defaultObjectEncoding:uint

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

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 ファイルで読み込めるローカル共有オブジェクトの書き込みが必要な場合は、ローカル共有オブジェクトを作成する前に、スクリプトの先頭部分で 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
ランタイムバージョン: AIR 1.0 Flash Player 9

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

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

fps を設定すると、sync イベントがトリガされ、サーバーに対するすべての変更が更新されるようになります。サーバーを手動のみで更新する場合は、fps を 0 に設定します。

sync イベントが送出されるまで、サーバーに変更は送信されません。つまり、サーバーからの応答時間が遅い場合、更新がサーバーに送られる頻度は、このプロパティに指定した値よりも少なくなる可能性があります。



実装
    public function set fps(value:Number):void
objectEncodingプロパティ 
objectEncoding:uint

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 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
ランタイムバージョン: AIR 1.0 Flash Player 9

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

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



実装
    public function get size():uint

関連項目



次のコードは、ID "thehobbit" を使用して SharedObject オブジェクトを作成します。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
ランタイムバージョン: AIR 1.0 Flash Player 9

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

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




次のコードは、hostName の値を ID として使用して、SharedObject オブジェクトを作成 (以降の実行では取得) します。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
ランタイムバージョン: AIR 1.0 Flash Player 9

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

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

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

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

リモート共有オブジェクトに対する操作を行う前に、try..catch..finally ステートメントを使用してエラーがないかを確認します。次に、sync イベントを監視して処理した後で、共有オブジェクトを変更します。sync イベントを送出する前にローカルで行った変更は失われる場合があります。

次の例は、connect() メソッドを呼び出して、リモート共有オブジェクトに接続します。

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

パラメータ

myConnection:NetConnection — Flash Media Server との通信に使用する NetConnection オブジェクトなど、RTMP (Real-Time Messaging Protocol) を使用する NetConnection オブジェクト。
 
params:String (default = null) — サーバー上のリモート共有オブジェクトに渡すメッセージを定義する文字列。Flash Media Server では使用できません。


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

関連項目

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

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

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

このメソッドが SharedObjectFlushStatus.PENDING を返した場合、このドメインからのオブジェクトを保存するためのディスク領域を増やすようユーザーに求めるダイアログボックスが表示されます。共有オブジェクトが保存されるときはそのための領域を大きくして PENDING が返されないようにするには、minDiskSpace に値を指定します。Flash Player は、ファイルを書き込む際、現在のサイズの共有オブジェクトを保存するのに必要な領域ではなく、minDiskSpace に指定されたバイト数を確認します。

たとえば、共有オブジェクトのサイズが、最初は小さくても最大 500 バイトまで大きくなると予想される場合には、minDiskSpace に 500 を指定します。ユーザーに対して共有オブジェクトへのディスク領域の割り当てを求める際には、500 バイトの領域が要求されます。要求されたディスク領域をユーザーが割り当てた場合、それ以降、オブジェクトのサイズが 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 は、共有オブジェクトをディスクに書き込むことができません。このエラーは、ユーザーがこのドメインからのオブジェクトに対して永続的にローカル情報を保存することを許可されていない場合に発生する可能性があります。

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

関連項目




次のコードは、hostName の値を ID として使用して、SharedObject オブジェクトを作成 (以降の実行では取得) します。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
ランタイムバージョン: AIR 1.0 Flash Player 9

現在のクライアントだけが利用できるローカル永続共有オブジェクトへの参照を返します。共有オブジェクトがまだ存在しない場合は、このメソッドにより作成されます。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 に SWF ファイルへの完全パス内のフォルダ名を付加する方法です。たとえば、www.myCompany.com/apps/stockwatcher.swf にある SWF ファイルで作成された portfolio 共有オブジェクトの場合は、localPath パラメータを //apps、または /apps/stockwatcher.swf に設定できます。アプリケーションに最適な柔軟性を提供できる方法がどれかを判断する必要があります。

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

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

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

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

SWF ファイルがこのメソッドを使用しないようにするには、SWF コンテンツを含んでいる HTML ページに allowNetworking パラメータ (object タグおよび embed タグのパラメータ) を設定します。

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

パラメータ

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

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

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

セキュアな共有オブジェクトの図

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

例外
Error — Flash Player は、何らかの理由で共有オブジェクトを作成できません。サードパーティの Flash コンテンツによる永続共有オブジェクトの作成と保存が禁止されている (ローカルコンテンツに適用されない) 場合、このエラーが発生することがあります。ユーザーは、http://www.adobe.com/support/documentation/jp/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
ランタイムバージョン: AIR 1.0 Flash Player 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 は、connect() メソッドに渡された NetConnection オブジェクトの URI と同一である必要があります。
 
persistence:Object (default = false) — 共有オブジェクトのデータプロパティの属性が、どこで永続的になっているか (ローカル、リモート、またはその両方) を指定します。このパラメータでは、共有オブジェクトをローカルで保存する場合の場所も指定できます。有効な値は次のとおりです。
  • false 値は、共有オブジェクトがクライアントまたはサーバーで永続的ではないことを指定します。
  • true 値は、共有オブジェクトがサーバー上のみで永続的であることを指定します。
  • 共有オブジェクトへのローカルの完全パスまたは部分パスは、共有オブジェクトがクライアントとサーバー上で永続的であることを示します。クライアントでは、共有オブジェクトは指定されたパスに保存されます。サーバー上では、アプリケーションディレクトリ内のサブディレクトリに保存されます。

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

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

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

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

関連項目

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

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

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

パラメータ

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

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

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

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

共有オブジェクトのプロパティの値が変更されたことをサーバーに通知します。このメソッドは、変更されたことを示す dirty としてプロパティをマークします。

SharedObject.setProperty() を呼び出して、共有オブジェクトのプロパティを作成します。

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

パラメータ

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

関連項目

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

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

共有オブジェクトのプロパティの値を更新し、プロパティの値が変更されたことをサーバーに通知します。setProperty() メソッドは、プロパティを changed または dirty として明示的にマークします。

リモート共有オブジェクトの詳細については、Flash Media Server のマニュアルを参照してください。

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

パラメータ

propertyName:String — 共有オブジェクトのプロパティの名前です。
 
value:Object (default = null) — プロパティの値 (ActionScript オブジェクト) です。プロパティを削除する場合は null を指定します。

関連項目

イベントの詳細
asyncError イベント
イベントオブジェクトの型: flash.events.AsyncErrorEvent
プロパティ AsyncErrorEvent.type = flash.events.AsyncErrorEvent.ASYNC_ERROR

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 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
ランタイムバージョン: AIR 1.0 Flash Player 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
ランタイムバージョン: AIR 1.0 Flash Player 9

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

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

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

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

関連項目

例の使用法
SharedObjectExample.as

次のコードは、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;
        }
    }
}




 

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flex/3_jp/langref/flash/net/SharedObject.html