| パッケージ | flash.net |
| クラス | public class SharedObject |
| 継承 | SharedObject EventDispatcher Object |
| 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | AIR 1.0 Flash Player 9 |
共有オブジェクトを使用して次の操作を行います。
SharedObject.getLocal() を呼び出して、アプリケーション内にメモリ付き電卓などの共有オブジェクトを作成することができます。ユーザーが電卓を閉じると、Flash Player により共有オブジェクトの最後の値がユーザーのコンピュータに保存されます。次に電卓を実行すると、電卓に前の値が表示されます。電卓アプリケーションを閉じる前に共有オブジェクトのプロパティを null に設定すると、次にアプリケーションを起動したときに、電卓にいずれの値も表示されません。その他のローカルの永続性の管理例としては、複雑な Web サイトのユーザー環境設定やその他のデータ (ニュースサイト上でユーザーが閲覧した記事のレコードなど) のトラッキングがあります。この情報をトラッキングすると、新規で未読の記事でなく、既に閲覧された記事を表示できます。 この情報をユーザーのコンピュータに保存すると、サーバーの負荷を削減できます。SharedObject.getRemote() を呼び出して、電話帳などのリモート共有オブジェクトを作成します。このオブジェクトは、サーバー上に永続化されます。あるクライアントが共有オブジェクトを変更すると、現在そのオブジェクトに接続しているクライアントおよび後でそのオブジェクトに接続するクライアントのすべてが、変更されたデータを利用できます。オブジェクトがローカルに永続化され、サーバーに接続されていないときにクライアントがデータを変更すると、次回クライアントがリモート共有オブジェクトに接続するときに、データがそのオブジェクトにコピーされます。 ローカル共有オブジェクトを作成するには、SharedObject.getLocal() () を呼び出します。リモート共有オブジェクトを作成するには、SharedObject.getRemote() () を呼び出します。
アプリケーションを閉じると、共有オブジェクトが保存されます。つまり、ディスクに書き込まれます。また、flush() メソッドを呼び出して、データを明示的にディスクに書き込むこともできます。
ローカルディスク領域についての考慮事項。 ローカル共有オブジェクトには、アプリケーションを設計する際に考慮が必要な、いくつかの制限があります。SWF ファイルでローカル共有オブジェクトの書き込みが許可されない場合があります。ローカル共有オブジェクトに格納されているデータが、わからないうちに削除される場合もあります。Flash Player のユーザーは、個々のドメインまたはすべてのドメインで使用できるディスク領域を管理できます。ユーザーが使用可能なディスク領域の量を減らすと、一部のローカル共有オブジェクトが削除される可能性があります。Flash Player のユーザーには、サードパーティドメイン (現在のブラウザのアドレスバーにあるドメイン以外のドメイン) によるローカル共有オブジェクトの読み取りまたは書き込みを防止できるプライバシーコントロール機能もあります。
メモ : リモートサーバーではなくローカルコンピュータに格納および実行される SWF ファイルは、常にサードパーティの共有オブジェクトをディスクに書き込むことができます。サードパーティの共有オブジェクトの詳細については、Flash Player のヘルプの「[グローバルストレージ設定] パネル」を参照してください。
ディスク領域の量とユーザーのプライバシーコントロールに関する失敗についてチェックすることをお勧めします。getLocal() および flush() の呼び出し時にこれらのチェックを実行します。
SharedObject.getLocal()ユーザーがサードパーティの共有オブジェクトを無効にし、SWF ファイルのドメインがブラウザのアドレスバーのドメインと一致しない場合など、このメソッドへの呼び出しに失敗すると、Flash Player は例外をスローします。SharedObject.flush()このメ\'83\'5cッドへの呼び出しに失敗すると、Flash Player は例外をスローします。呼び出しに成功すると、SharedObjectFlushStatus.FLUSHED を返します。追加の記憶域が必要な場合は、SharedObjectFlushStatus.PENDING を返します。Flash Player はローカルに保存する情報用の記憶域を増加するようにユーザーに要求します。したがって、netStatus イベントは保存に失敗したか成功したかを示す情報オブジェクトと一緒に送出されます。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 です。
関連項目
| プロパティ | 定義元 | ||
|---|---|---|---|
| client : Object
コールバックメソッドが呼び出されるオブジェクトを示します。 | SharedObject | ||
![]() | constructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。 | Object | |
| data : Object [読み取り専用]
オブジェクトの data プロパティに割り当てられた属性のコレクションです。これらの属性は共有および保存することができます。 | SharedObject | ||
| defaultObjectEncoding : uint [静的]
SWF ファイルで作成されたすべてのローカル共有オブジェクトのデフォルトのオブジェクトエンコード (AMF バージョン) です。 | SharedObject | ||
| fps : Number [書き込み専用]
共有オブジェクトに対するクライアントの変更がサーバーに送信される回数 (1 秒あたり) を指定します。 | SharedObject | ||
| objectEncoding : uint
この共有オブジェクトのオブジェクトエンコード (AMF バージョン) です。 | SharedObject | ||
![]() | prototype : Object [静的]
クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。 | Object | |
| size : uint [読み取り専用]
共有オブジェクトの現在のサイズ (バイト数) です。 | SharedObject | ||
| メソッド | 定義元 | ||
|---|---|---|---|
![]() | addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。 | EventDispatcher | |
ローカル共有オブジェクトの場合、すべてのデータを消去し、共有オブジェクトをディスクから削除します。 | SharedObject | ||
リモート共有オブジェクトとサーバーとの間の接続を閉じます。 | SharedObject | ||
指定した NetConnection オブジェクトを介して、サーバー上のリモート共有オブジェクトに接続します。 | SharedObject | ||
![]() |
イベントをイベントフローに送出します。 | EventDispatcher | |
ローカルに永続化された共有オブジェクトを直ちにローカルファイルに書き込みます。 | SharedObject | ||
[静的]
現在のクライアントだけが利用できるローカル永続共有オブジェクトへの参照を返します。 | SharedObject | ||
getRemote(name:String, remotePath:String = null, persistence:Object = false, secure:Boolean = false):SharedObject [静的]
複数のクライアントがアクセスできる、Flash Media Server 上の共有オブジェクトへの参照が返されます。 | SharedObject | ||
![]() |
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。 | EventDispatcher | |
![]() |
オブジェクトに指定されたプロパティが定義されているかどうかを示します。 | Object | |
![]() |
Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。 | Object | |
![]() |
指定されたプロパティが存在し、列挙できるかどうかを示します。 | Object | |
![]() |
EventDispatcher オブジェクトからリスナーを削除します。 | EventDispatcher | |
リモート共有オブジェクトに接続しているすべてのクライアント (メッセージを送信したクライアントも含む) に、メッセージをブロードキャストします。 | SharedObject | ||
共有オブジェクトのプロパティの値が変更されたことをサーバーに通知します。 | SharedObject | ||
共有オブジェクトのプロパティの値を更新し、プロパティの値が変更されたことをサーバーに通知します。 | SharedObject | ||
![]() |
ループ処理に対するダイナミックプロパティの可用性を設定します。 | Object | |
![]() |
指定されたオブジェクトのストリング表現を返します。 | Object | |
![]() |
指定されたオブジェクトのプリミティブな値を返します。 | Object | |
![]() |
指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。 | EventDispatcher | |
| イベント | 概要 | 定義元 | ||
|---|---|---|---|---|
![]() | [ブロードキャスト イベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを取得して、アクティブになったときに送出されます。 | EventDispatcher | ||
| 非同期形式で、つまりネイティブ非同期コードから例外がスローされると送出されます。 | SharedObject | |||
![]() | [ブロードキャスト イベント] 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):voidTypeError — 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) です。
オブジェクトエンコードは、共有オブジェクトがローカルかリモートかによって、処理方法が異なります。
objectEncoding プロパティの値を取得または設定できます。objectEncoding の値は、このローカル共有オブジェクトの書き込み に使用されるフォーマットに影響します。このローカル共有オブジェクトを ActionScript 2.0 または 1.0 SWF ファイルで読み込めなければならない場合は、objectEncoding を ObjectEncoding.AMF0 に設定します。オブジェクトエンコードが AMF3 を書き込むように設定されていても、Flash Player で AMF0 ローカル共有オブジェクトを読み込むことができます。つまり、このプロパティのデフォルト値 (ObjectEncoding.AMF3) を使用すれば、ActionScript 2.0 または 1.0 SWF ファイルで作成した共有オブジェクトも引き続き SWF ファイルで読み込むことができます。
objectEncoding 設定を継承します。サーバーに接続されていないときは、リモート共有オブジェクトは、関連付けされた NetConnection インスタンスから defaultObjectEncoding 設定を継承します。リモート共有オブジェクトの objectEncoding プロパティの値は NetConnection インスタンスにより決定されるため、このプロパティはリモート共有オブジェクトでは読み取り専用になります。
public function get objectEncoding():uint public function set objectEncoding(value:uint):voidReferenceError — リモート共有オブジェクトの objectEncoding プロパティの値を設定しようとしました。このプロパティは、関連付けられた NetConnection インスタンスにより値が決定されるため、リモート共有オブジェクトでは読み取り専用になります。
|
関連項目
| size | プロパティ |
size:uint [読み取り専用] | 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | AIR 1.0 Flash Player 9 |
共有オブジェクトの現在のサイズ (バイト数) です。
すべてのデータプロパティを順に確認することによって、共有オブジェクトのサイズが計算されます。オブジェクトが持つデータプロパティが多いほど、サイズの計算に時間がかかります。オブジェクトのサイズを調べる処理は非常に時間がかかる場合があるので、特に必要がない限り、このメソッドの使用は避けてください。
public function get size():uint関連項目
"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 — 次のいずれかの値になります。
|
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 または 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 接続経由で配信されている場合、このパラメータの値には次の効果があります。
SWF ファイルが HTTPS 以外の接続で配信された場合、このパラメータを 次の図に、
|
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) — 共有オブジェクトのデータプロパティの属性が、どこで永続的になっているか (ローカル、リモート、またはその両方) を指定します。このパラメータでは、共有オブジェクトをローカルで保存する場合の場所も指定できます。有効な値は次のとおりです。
メモ : ユーザーがこのドメイン用のローカル記憶域を許可していない場合は、永続性のローカルパスが指定されていても、オブジェクトはローカルに保存されません。詳細については、クラスの説明を参照してください。 | |
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 レベルのみで (つまり、親子形式を取ることができません)、共有オブジェクトに相対します。引数は直列化され、接続を介して送信されます。受信側のハンドラは同じ順番でそれらの引数を受け取ります。パラメータが循環オブジェクト (循環するリンクされたリストなど) である場合、シリアライザは参照を正しく処理します。
メモ : 関数名には予約語を使用しないでください。たとえば、 |
| 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.AsyncErrorEventflash.events.AsyncErrorEvent.ASYNC_ERROR| 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | AIR 1.0 Flash Player 9 |
非同期形式で、つまりネイティブ非同期コードから例外がスローされると送出されます。
AsyncErrorEvent.ASYNC_ERROR 定数は、type プロパティ(asyncError イベントオブジェクト)の値を定義します。
このイベントには、次のプロパティがあります。
| プロパティ | 値 |
|---|---|
bubbles | false |
cancelable | false は、キャンセルするデフォルトの動作がないことを示します。 |
currentTarget | イベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。 |
target | イベントを送出するオブジェクトです。 |
error | イベントをトリガしたエラーです。 |
| netStatus | イベント |
flash.events.NetStatusEventflash.events.NetStatusEvent.NET_STATUS| 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | AIR 1.0 Flash Player 9 |
SharedObject インスタンスが、そのステータスまたはエラーの状況をレポートするときに送出されます。netStatus イベントには、info プロパティが含まれます。このプロパティは、接続試行が成功したかどうかや共有オブジェクトのローカルディスクへの書き込みが成功したかどうかなど、イベントに関する特定の情報を含む情報オブジェクトです。
type プロパティ (netStatus イベントオブジェクト) の値を定義します。
このイベントには、次のプロパティがあります。
| プロパティ | 値 |
|---|---|
bubbles | false |
cancelable | false は、キャンセルするデフォルトの動作がないことを示します。 |
currentTarget | イベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。 |
info | オブジェクトのステータスまたはエラー状態を記述するプロパティを持つオブジェクトです。 |
target | そのステータスを報告する NetConnection または NetStream オブジェクトです。 |
関連項目
| sync | イベント |
flash.events.SyncEventflash.events.SyncEvent.SYNC| 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | AIR 1.0 Flash Player 9 |
リモート共有オブジェクトがサーバーによって更新されるときに送出されます。
type プロパティ (sync イベントオブジェクト) の値を定義します。
このイベントには、次のプロパティがあります。
| プロパティ | 値 |
|---|---|
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;
}
}
}
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flex/3_jp/langref/flash/net/SharedObject.html