| パッケージ | flash.net |
| public class SharedObject | |
| 継承 | SharedObject EventDispatcher Object |
NetStream クラスのプロパティやメソッドの中には、主に Flash Media Server 2 や Flex などのサーバーで使用することを目的としたものがあります。これらのプロパティとメソッドには、サーバーサイド機能を追加できます。詳細については、 Flash Media Server マニュアルの「NetStream class」を参照してください。
次に、共有オブジェクトの 3 つの一般的な使用方法を説明します。
SharedObject.getLocal() を呼び出して、Flash Player アプリケーション内で共有オブジェクト (たとえば、メモリ付きの電卓など) を作成することができます。ユーザーが電卓を閉じると、Flash Player により共有オブジェクトの最後の値がユーザーのコンピュータに保存されます。次に電卓を実行すると、電卓に前の値が表示されます。電卓アプリケーションを閉じる前に共有オブジェクトのプロパティを null に設定すると、次にアプリケーションを起動したときは、電卓に以前の値は表示されません。その他のローカルの永続性の管理例としては、複雑な Web サイトのユーザー環境設定やその他のデータ (ニュースサイト上でユーザーが閲覧した記事のレコードなど) のトラッキングがあります。この情報をトラッキングすると、新規で未読の記事でなく、既に閲覧された記事を表示できます。この情報をユーザーのコンピュータに保存すると、サーバーの負荷を削減できます。
ローカル共有オブジェクトを作成するには、次のシンタックスを使用します。
var so:SharedObject = SharedObject.getLocal("userHighScore");
so.data.highScore = new Number(1234567890);
so.flush();
この例では、共有オブジェクトがディスクに明示的に保存または書き込まれています。アプリケーションが閉じると、共有オブジェクトは自動的に保存されますが、データをディスクに書き込む手順を示すため、保存したオブジェクトはここに表示されます。
ローカルディスク領域についての考慮事項 : ローカル共有オブジェクトは非常に役に立ちますが、アプリケーションの設計時に考慮する必要があるいくつかの制限があります。SWF ファイルでローカル共有オブジェクトの書き込みが許可されない場合があります。ローカル共有オブジェクトに格納されているデータが、わからないうちに削除される場合もあります。Flash Player のユーザーは、個々のドメインまたはすべてのドメインで使用できるディスク領域を管理できます。ユーザーが使用可能なディスク領域の量を減らすと、一部のローカル共有オブジェクトが削除される可能性があります。Flash Player のユーザーには、サードパーティドメイン (現在のブラウザのアドレスバーにあるドメイン以外のドメイン) によるローカル共有オブジェクトの読み取りまたは書き込みを防止できるプライバシーコントロール機能もあります。
メモ:リモートサーバーではなくローカルコンピュータで格納および実行される SWF ファイルは、ディスクへのサードパーティによる共有オブジェクトの書き込みを許可していない場合でも、常にディスクにサードパーティの共有オブジェクトを書き込むことができます。サードパーティの共有オブジェクトの詳細については、Flash Player のヘルプの「グローバル記憶領域の設定パネル」にあるサードパーティコンテンツに関する説明を参照してください。
ディスク領域の量とユーザーのプライバシーコントロールに関する失敗についてチェックすることをお勧めします。getLocal() および flush() の呼び出し時にこれらのチェックを実行します。
SharedObject.getLocal() ユーザーがサードパーティの共有オブジェクトを無効にし、SWF ファイルのドメインがブラウザのアドレスバーのドメインと一致しない場合など、このメソッドへの呼び出しに失敗すると、Flash Player は例外をスローします。SharedObject.flush() このメソッドへの呼び出しに失敗すると、Flash Player は例外をスローします。呼び出しに成功すると、SharedObjectFlushStatus.FLUSHED を返します。追加の記憶域が必要な場合は、SharedObjectFlushStatus.PENDING を返します。Flash Player はローカルに保存する情報用の記憶域を増加するようにユーザーに要求します。したがって、netStatus イベントは保存に失敗したか成功したかを示す情報オブジェクトと一緒に送出されます。SWF ファイルでローカル共有オブジェクトを作成または変更しようとする場合、SWF ファイルの幅が最低でも 215 ピクセル、高さが最低でも 138 ピクセルあることを確認してください。このサイズは、ダイアログボックス (ローカル共有オブジェクトの記憶域制限を増やすかどうかをユーザーに確認する) を表示するための最小の大きさです。SWF ファイルがこの大きさよりも小さく、記憶域制限を増やす必要がある場合、SharedObject.flush() は失敗し、SharedObjectFlushedStatus.PENDING を返し、netStatus イベントを送出します。
関連項目
| プロパティ | 定義 | ||
|---|---|---|---|
| client : Object
コールバックメソッドが呼び出されるオブジェクトを示します。
| SharedObject | ||
![]() | constructor : Object
特定のオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。
| Object | |
| data : Object
[read-only]
オブジェクトの
data プロパティに割り当てられた属性のコレクションです。これらの属性は共有および保存することができます。 | SharedObject | ||
| defaultObjectEncoding : uint
[static]
SWF ファイルで作成されたすべてのローカル共有オブジェクトのデフォルトオブジェクトのエンコード (AMF バージョン)です。
| SharedObject | ||
| fps : Number
[write-only]
共有オブジェクトに対するクライアントの変更がサーバーに送信される回数 (1 秒あたり) を指定します。
| SharedObject | ||
| objectEncoding : uint
この共有オブジェクトのエンコード (AMF バージョン)です。
| SharedObject | ||
![]() | prototype : Object
[static]
クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。
| Object | |
| size : uint
[read-only]
共有オブジェクトの現在のサイズ (バイト数)です。
| SharedObject | ||
| メソッド | 定義 | ||
|---|---|---|---|
![]() | addEventListener(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 | ||
![]() | dispatchEvent(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 | ||
![]() | hasEventListener(type:String):Boolean
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。
| EventDispatcher | |
![]() | hasOwnProperty(name:String):Boolean
オブジェクトに指定されたプロパティが定義されているかどうかを示します。
| Object | |
![]() | isPrototypeOf(theClass:Object):Boolean
Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。
| Object | |
![]() | propertyIsEnumerable(name:String):Boolean
指定されたプロパティが存在し、列挙可能かどうかを示します。
| Object | |
![]() | removeEventListener(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 | ||
![]() | setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
ループ処理に対するダイナミックプロパティの可用性を設定します。
| Object | |
![]() | toString():String
指定されたオブジェクトのストリング表現を返します。
| Object | |
![]() | valueOf():Object
指定されたオブジェクトのプリミティブ値を返します。
| Object | |
![]() | willTrigger(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
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) です。
オブジェクトエンコードは、共有オブジェクトがローカルかリモートかによって、処理方法が異なります。
objectEncoding プロパティの値を取得または設定できます。objectEncoding の値は、このローカル共有オブジェクトの書き込みに使用されるフォーマットに影響します。このローカル共有オブジェクトを ActionScript 2.0 または 1.0 SWF ファイルで読み込み可能にする必要がある場合は、objectEncoding をObjectEncoding.AMF0 に設定します。オブジェクトエンコードが AMF3 を書き込むように設定されていても、Flash Player で AMF0 ローカル共有オブジェクトを読み込むことができます。つまり、このプロパティ ObjectEncoding.AMF3 のデフォルト値を使用しても、ActionScript 2.0 または 1.0 SWF ファイルで作成した共有オブジェクトをSFW ファイルで読み込むことができます。
objectEncoding 設定を継承します。サーバーに接続されていないときは、リモート共有オブジェクトは、関連付けされた NetConnection インスタンスから defaultObjectEncoding 設定を継承します。
リモート共有オブジェクトの objectEncoding プロパティの値は NetConnection インスタンスにより決定されるため、このプロパティはリモート共有オブジェクトの読み取り専用になります。
public function get objectEncoding():uint
public function set objectEncoding(value:uint):void
ReferenceError — リモート共有オブジェクトの objectEncoding プロパティの値を設定しようとしました。このプロパティの値は、関連付けられた NetConnection インスタンスにより決定されるため、リモート共有オブジェクトの読み取り専用です。
|
関連項目
| size | プロパティ |
size:uint [read-only]共有オブジェクトの現在のサイズ (バイト数)です。
すべてのデータプロパティを順に確認することによって、共有オブジェクトのサイズが計算されます。オブジェクトが持つデータプロパティが多いほど、サイズの計算に時間がかかります。オブジェクトのサイズを調べる処理は、非常に時間がかかる場合があり、特に必要がない限り、このメソッドの使用を避けることができます。
実装 public function get size():uint
関連項目
"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.Failed の code プロパティを使用して送出されます。
minDiskSpace:int (default = 0) — このオブジェクトに割り当てる必要のある最小ディスク領域 (バイト単位) です。
|
String —
次のいずれかの値になります。
|
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 または 3) は、共有オブジェクトを 1 つの場所に格納します。ローカルファイルシステムへのアクセス権を持たないローカルファイル (レベル 2) は、共有オブジェクトを別の場所に格納します。
詳細については、次のトピックを参照してください。
name:String — オブジェクト名です。名前にはスラッシュ (/) を含めます。たとえば、work/addresses は有効な名前です。共有オブジェクト名にスペース、および以下の文字を含めることはできません。
~ % & \ ; : " ' , < > ? # |
|
localPath:String (default = null) — 共有オブジェクトを作成した SWF ファイルの完全パスまたは部分パスです。これによって、共有オブジェクトをローカルに保存する場所が決まります。このパラメータを指定しない場合は、完全パスが使用されます。
|
|
secure:Boolean (default = false) — この共有オブジェクトへのアクセスが HTTPS 接続経由で配布された SWF ファイルに限定されているかどうかを判別します。SWF ファイルが HTTPS 接続経由で配布されている場合、このパラメータの値には、次のエフェクトがあります。
SWF ファイルが HTTPS 以外の接続経由で配信される場合、このパラメータを 次の図に、
|
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) — 共有オブジェクトのデータプロパティの属性が、どこで永続的になっているか (ローカル、リモート、またはその両方) を指定します。このパラメータでは、共有オブジェクトをローカルで保存する場合の場所も指定できます。有効な値は次のとおりです。
メモ:ユーザーがこのドメインに対してローカル記憶域を許可しない場合は、ローカルパスが指定されていても、オブジェクトはローカルに保存されません。詳細については、クラスの説明を参照してください。 |
|
secure:Boolean (default = false) — この共有オブジェクトへのアクセスが HTTPS 接続経由で配布された SWF ファイルに限定されているかどうかを判別します。詳細については、getLocal メソッドエントリの secure パラメータの説明を参照してください。
|
SharedObject —
複数クライアントでの共有ができるオブジェクトへの参照です。
|
Error — Flash Player は、共有オブジェクトを作成できません、または見つけられません。これは、remotePath パラメータと persistence パラメータに存在しないパスが指定されている場合に起こります。
|
関連項目
| send | () | メソッド |
public function send(... arguments):void指定されたリモート共有オブジェクトに接続しているすべてのクライアント (メッセージを送信したクライアントも含む) に、メッセージをブロードキャストします。メッセージを処理し応答するには、共有オブジェクトに送信するハンドラ関数を作成します。
パラメータ... arguments — 複数の引数 :メッセージを識別するストリング、共有オブジェクトに割り当てる複数のハンドラ関数名、および任意のデータ型を指定できるオプションのパラメータです。それらは直列化され、接続を介して送信されます。受信側のハンドラは同じ順番でそれらを受け取ります。パラメータが循環オブジェクト (循環するリンクされたリストなど) である場合、シリアライザは参照を正しく処理します。
メモ:関数名には予約語を使用しないでください。たとえば、 |
| 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 です。
|
関連項目
| asyncError | event |
flash.events.AsyncErrorEvent
flash.events.AsyncErrorEvent.ASYNC_ERROR
非同期形式で、つまりネイティブ非同期コードから例外がスローされると送出されます。
AsyncErrorEvent.ASYNC_ERROR 定数は、asyncError イベントオブジェクトの type プロパティ値を定義します。
このイベントには、次のプロパティがあります。
| プロパティ | 値 |
|---|---|
bubbles | false |
cancelable | false は、キャンセルするデフォルトの動作がないことを示します。 |
currentTarget | イベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。 |
target | ネットワーク操作エラーが発生したオブジェクトです。 |
error | イベントをトリガしたエラーです。 |
| netStatus | event |
flash.events.NetStatusEvent
flash.events.NetStatusEvent.NET_STATUS
SharedObject インスタンスが、そのステータスまたはエラーの状況をレポートするときに送出されます。netStatus イベントには、info プロパティが含まれます。このプロパティは、接続試行が成功したかどうかや共有オブジェクトがローカルディスクへの書き込みに成功したかどうかなど、イベントに関する特定の情報を含む情報オブジェクトです。
netStatus イベントオブジェクトの type プロパティの値を定義します。
このイベントには、次のプロパティがあります。
| プロパティ | 値 |
|---|---|
bubbles | false |
cancelable | false は、キャンセルするデフォルトの動作がないことを示します。 |
currentTarget | イベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。 |
info | オブジェクトのステータスまたはエラー状態を記述するプロパティを持つオブジェクトです。 |
target | そのステータスをレポートする NetConnection または NetStream オブジェクトです。 |
関連項目
| sync | event |
flash.events.SyncEvent
flash.events.SyncEvent.SYNC
リモート共有オブジェクト (SharedObject) がサーバーによって更新されるときに送出されます。
sync イベントオブジェクトの type プロパティの値を定義します。
このイベントには、次のプロパティがあります。
| プロパティ | 値 |
|---|---|
bubbles | false |
cancelable | false は、キャンセルするデフォルトの動作がないことを示します。 |
currentTarget | イベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。 |
changeList | 配列のステータスを記述するプロパティを持つ配列です。 |
target | サーバーによって更新された SharedObject インスタンスです。 |
関連項目
"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;
}
}
}