パッケージ | flash.net |
クラス | public class SharedObject |
継承 | SharedObject EventDispatcher Object |
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
共有オブジェクトを使用して次の操作を行います。
-
ローカルの永続性を維持する。共有オブジェクトを使用するにはこれが最も簡単な方法で、Flash Media Server は使用しません。例えば、
SharedObject.getLocal()
を呼び出して、アプリケーション内にメモリ付き電卓などの共有オブジェクトを作成することができます。ユーザーが電卓を閉じると、Flash Player により共有オブジェクトの最後の値がユーザーのコンピューターに保存されます。次に電卓を実行すると、電卓に前の値が表示されます。電卓アプリケーションを閉じる前に共有オブジェクトのプロパティをnull
に設定すると、次にアプリケーションを起動したときに、電卓にいずれの値も表示されません。その他のローカルの永続性の管理例としては、複雑な Web サイトのユーザー環境設定やその他のデータ(ニュースサイト上でユーザーが閲覧した記事のレコードなど)のトラッキングがあります。この情報をトラッキングすると、新規で未読の記事でなく、既に閲覧された記事を表示できます。 この情報をユーザーのコンピューターに保存すると、サーバーの負荷を削減できます。 -
Flash Media Server にデータを格納および共有する。サーバー上の共有オブジェクトには、他のクライアントが取得可能なデータを格納できます。例えば、
SharedObject.getRemote()
を呼び出して、電話帳などのリモート共有オブジェクトを作成します。このオブジェクトは、サーバー上に永続化されます。あるクライアントが共有オブジェクトを変更すると、現在そのオブジェクトに接続しているクライアントおよび後でそのオブジェクトに接続するクライアントのすべてが、変更されたデータを利用できます。オブジェクトがローカルに永続化され、サーバーに接続されていないときにクライアントがデータを変更すると、次回クライアントがリモート共有オブジェクトに接続するときに、データがそのオブジェクトにコピーされます。 - リアルタイムでデータを共有する。共有オブジェクトは、複数のクライアント間でリアルタイムにデータを共有できます。例えば、チャットルームに接続しているユーザーのリストを格納するリモート共有オブジェクトを開くことができます。これはオブジェクトに接続しているすべてのクライアントに表示することができます。ユーザーがチャットルームに入退室するときに、オブジェクトが更新され、オブジェクトに接続しているすべてのクライアントに、更新後のチャットルームユーザーの一覧が表示されます。
ローカル共有オブジェクトを作成するには、SharedObject.getLocal()
を呼び出します。リモート共有オブジェクトを作成するには、SharedObject.getRemote()
を呼び出します。
アプリケーションを閉じると、共有オブジェクトが保存されます。つまり、ディスクに書き込まれます。また、flush()
メソッドを呼び出して、データを明示的にディスクに書き込むこともできます。
ローカルディスク領域についての考慮事項。 ローカル共有オブジェクトには、アプリケーションを設計する際に考慮が必要な、いくつかの制限があります。SWF ファイルでローカル共有オブジェクトの書き込みが許可されない場合があります。ローカル共有オブジェクトに格納されているデータが、わからないうちに削除される場合もあります。Flash Player のユーザーは、個々のドメインまたはすべてのドメインで使用できるディスク領域を管理できます。ユーザーが使用可能なディスク領域の量を減らすと、一部のローカル共有オブジェクトが削除される可能性があります。Flash Player のユーザーには、サードパーティードメイン(現在のブラウザーのアドレスバーにあるドメイン以外のドメイン)によるローカル共有オブジェクトの読み取りまたは書き込みを防止できるプライバシーコントロール機能もあります。また、Mac OS では AIR 3.3 以降に、ローカル共有オブジェクトの場所が変更されました。そのため、3.3 名前空間にアップグレードする場合、オブジェクトが実際には消失していないのに、消失したような状態になることがあります。
注意:リモートサーバーではなくローカルコンピューターに格納および実行される 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
イベントを送出します。
リモート共有オブジェクト。 Flash Media Server では、アプリケーションに接続しているすべてのクライアントがリアルタイムで共有する、リモート共有オブジェクトを作成および使用できます。あるクライアントがリモート共有オブジェクトのプロパティを変更すると、接続しているすべてのクライアントのプロパティが変更されます。リモート共有オブジェクトを使用すると、例えば、マルチプレーヤーゲームのユーザーなどのクライアントを同期できます。
各リモート共有オブジェクトに data
プロパティがあります。これは、データを格納するプロパティを持つオブジェクトです。setProperty()
を呼び出して、データオブジェクトのプロパティを変更します。サーバーは、プロパティを更新し、sync
イベントを送出し、接続しているクライアントにプロパティを返送します。
クライアント、サーバー、またはその両方のリモート共有オブジェクトを永続化できます。デフォルトでは、サイズが最大 100K の永続的なリモート共有オブジェクトがローカルに保存されます。大きなオブジェクトを保存しようとすると、ローカル記憶領域ダイアログボックスが表示されます。このダイアログボックスでは、ユーザーが共有オブジェクト用のローカル記憶域の使用を許可または拒否できます。ステージのサイズは必ず 215 × 138 ピクセル以上に設定してください。これは、ダイアログボックスを表示するために必要な最小サイズです。
ユーザーが「許可」をクリックすると、サーバーに共有オブジェクトが保存され、netStatus
イベントが送出されます。このときの code
プロパティは SharedObject.Flush.Success
です。ユーザーが「拒否」を選択すると、サーバーに共有オブジェクトは保存されず、netStatus
イベントが送出されます。このときの code
プロパティは SharedObject.Flush.Failed
です。
関連する API エレメント
プロパティ | 定義元 | ||
---|---|---|---|
client : Object
コールバックメソッドが呼び出されるオブジェクトを示します。 | SharedObject | ||
constructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクター関数への参照です。 | Object | ||
data : Object [読み取り専用]
オブジェクトの data プロパティに割り当てられた属性のコレクションです。これらの属性は共有および保存することができます。 | SharedObject | ||
defaultObjectEncoding : uint [静的]
SWF ファイルで作成されたすべてのローカル共有オブジェクトのデフォルトのオブジェクトエンコード(AMF バージョン)です。 | SharedObject | ||
fps : Number [書き込み専用]
共有オブジェクトに対するクライアントの変更がサーバーに送信される回数(1 秒あたり)を指定します。 | SharedObject | ||
objectEncoding : uint
この共有オブジェクトのオブジェクトエンコード(AMF バージョン)です。 | SharedObject | ||
preventBackup : Boolean [静的]
ローカル共有オブジェクトが iOS のクラウドバックアップサービスでバックアップされるかどうかを指定します。 | SharedObject | ||
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 | ||
指定されたオブジェクトのプリミティブな値を返します。 | 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, Flash Lite 4 |
コールバックメソッドが呼び出されるオブジェクトを示します。デフォルトのオブジェクトは 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, Flash Lite 4 |
オブジェクトの 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
関連する API エレメント
defaultObjectEncoding | プロパティ |
defaultObjectEncoding:uint
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
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 static function set defaultObjectEncoding(value:uint):void
関連する API エレメント
fps | プロパティ |
fps:Number
[書き込み専用] 言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
共有オブジェクトに対するクライアントの変更がサーバーに送信される回数(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, Flash Lite 4 |
この共有オブジェクトのオブジェクトエンコード(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 ファイルで読み込むことができます。 - リモート共有オブジェクト。サーバーに接続されているときは、リモート共有オブジェクトは、関連付けられた NetConnection インスタンス(リモート共有オブジェクトへの接続に使用されるインスタンス)の
objectEncoding
設定を継承します。サーバーに接続されていないときは、リモート共有オブジェクトは、関連付けされた NetConnection インスタンスからdefaultObjectEncoding
設定を継承します。リモート共有オブジェクトのobjectEncoding
プロパティの値は NetConnection インスタンスにより決定されるため、このプロパティはリモート共有オブジェクトでは読み取り専用になります。
実装
public function get objectEncoding():uint
public function set objectEncoding(value:uint):void
例外
ReferenceError — リモート共有オブジェクトの objectEncoding プロパティの値を設定しようとしました。このプロパティは、関連付けられた NetConnection インスタンスにより値が決定されるため、リモート共有オブジェクトでは読み取り専用になります。
|
関連する API エレメント
preventBackup | プロパティ |
preventBackup:Boolean
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 3.7 |
ローカル共有オブジェクトが iOS のクラウドバックアップサービスでバックアップされるかどうかを指定します。
true または false を指定します。
- true - すべてのローカル共有オブジェクトが iOSのバックアップクラウドサービスでバックアップされないようにします。
- false(デフォルト) - ローカル共有オブジェクトが iOS のバックアップクラウドサービスでバックアップされます。
このプロパティは、ローカル共有オブジェクトのみに適用され、iOS にのみ使用できます。
実装
public static function get preventBackup():Boolean
public static function set preventBackup(value:Boolean):void
size | プロパティ |
size:uint
[読み取り専用] 言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
共有オブジェクトの現在のサイズ(バイト数)です。
すべてのデータプロパティを順に確認することによって、共有オブジェクトのサイズが計算されます。オブジェクトが持つデータプロパティが多いほど、サイズの計算に時間がかかります。オブジェクトのサイズを調べる処理は非常に時間がかかる場合があるので、特に必要がない限り、このメソッドの使用は避けてください。
実装
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 Lite 4 |
ローカル共有オブジェクトの場合、すべてのデータを消去し、共有オブジェクトをディスクから削除します。共有オブジェクトへの参照はアクティブなままで、そのデータプロパティが削除されます。
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, Flash Lite 4 |
リモート共有オブジェクトとサーバーとの間の接続を閉じます。リモート共有オブジェクトがローカルに永続化されている場合、ユーザーはこのメソッドの呼び出し後に、オブジェクトのローカルコピーを変更できます。ローカルオブジェクトの変更は、次回にユーザーがリモート共有オブジェクトに接続したときに、サーバーに送られます。
connect | () | メソッド |
public function connect(myConnection:NetConnection, params:String = null):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
指定した 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 インスタンスが有効であり接続されていること、リモート共有オブジェクトがサーバーに正常に作成されたことを確認してください。
|
関連する API エレメント
flush | () | メソッド |
public function flush(minDiskSpace:int = 0):String
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
ローカルに永続化された共有オブジェクトを直ちにローカルファイルに書き込みます。このメソッドを使用しない場合、共有オブジェクトがファイルに書き込まれるのは、共有オブジェクトセッションの終了時となります。つまり、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 は、共有オブジェクトをディスクに書き込むことができません。このエラーは、ユーザーがこのドメインからのオブジェクトに対して永続的にローカル情報を保存することを許可されていない場合に発生する可能性があります。
注意:サードパーティードメイン(現在のブラウザーのアドレスバーにあるドメイン以外のドメイン)の共有オブジェクトのディスクへの書き込みを許可していない場合でも、ローカルコンテンツでは、常にサードパーティードメインの共有オブジェクトをディスクに書き込むことができます。 |
関連する API エレメント
例 ( この例の使用方法 )
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, Flash Lite 4 |
現在のクライアントだけが利用できるローカル永続共有オブジェクトへの参照を返します。共有オブジェクトがまだ存在しない場合は、このメソッドにより作成されます。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
に設定できます。アプリケーションに最適な柔軟性を提供できる方法がどれかを判断する必要があります。
このメソッドを使用するときは、次のセキュリティモデルを考慮してください。
- サンドボックスの境界を越えて共有オブジェクトにアクセスすることはできません。
- Flash Player の設定ダイアログボックスまたは設定マネージャーを使用して、共有オブジェクトへのアクセスを制限できます。デフォルトでは、アプリケーションでドメインごとに最大 100 KB の共有オブジェクトを作成できます。管理者および一般ユーザーは、ファイルシステムへの書き込み機能に制限を適用することもできます。
ローカルファイル(ローカルにインストールされた SWF ファイルまたは EXE ファイル)として再生する SWF ファイルコンテンツをパブリッシュし、複数のローカル SWF ファイルから特定の共有オブジェクトにアクセスする必要があるとします。この状況では、ローカルファイルでは共有オブジェクトの保存に 2 つの異なる場所が使用されることがあるので注意してください。使用されるドメインは、共有オブジェクトを作成したローカルファイルに付与されるセキュリティ許可によって変わります。ローカルファイルには、次の 3 つの異なる許可レベルを設定できます。
- ローカルファイルシステムのみに対するアクセス
- ネットワークのみに対するアクセス
- ネットワークとローカルファイルシステムの両方に対するアクセス
ローカルファイルシステムへのアクセス権を持つローカルファイル(レベル 1 または 3)は、共有オブジェクトを 1 つの場所に格納します。ローカルファイルシステムへのアクセス権を持たないローカルファイル(レベル 2)は、共有オブジェクトを別の場所に格納します。
SWF ファイルがこのメソッドを使用しないようにするには、SWF コンテンツを含んでいる HTML ページに allowNetworking
パラメーター(object
タグおよび embed
タグのパラメーター)を設定します。
詳細については、Flash Player デベロッパーセンターのトピック:セキュリティを参照してください。
パラメーター
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 Lite 4 |
複数のクライアントがアクセスできる、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 パラメーターに、存在しないパスが指定されていると起こることがあります。
|
関連する API エレメント
send | () | メソッド |
public function send(... arguments):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
リモート共有オブジェクトに接続しているすべてのクライアント(メッセージを送信したクライアントも含む)に、メッセージをブロードキャストします。メッセージを処理して応答するには、共有オブジェクトに関連付けるコールバック関数を作成します。
パラメーター
... arguments — 複数の引数:メッセージを識別するストリング、共有オブジェクトに割り当てる複数のハンドラー関数名、および任意のデータ型のオプションのパラメーターです。ハンドラー名の深さは 1 レベルのみで(つまり、親子形式を取ることができません)、共有オブジェクトに相対します。引数は直列化され、接続を介して送信されます。受信側のハンドラーは同じ順番でそれらの引数を受け取ります。パラメーターが循環オブジェクト(循環するリンクされたリストなど)である場合、シリアライザは参照を正しく処理します。
注意:関数名には予約語を使用しないでください。例えば、 |
setDirty | () | メソッド |
public function setDirty(propertyName:String):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
共有オブジェクトのプロパティの値が変更されたことをサーバーに通知します。このメソッドは、変更されたことを示す dirty としてプロパティをマークします。
SharedObject.setProperty()
を呼び出して、共有オブジェクトのプロパティを作成します。
SharedObject.setProperty()
メソッドは、setDirty()
を実装します。ほとんどの場合、例えばプロパティの値がストリングや数値のようなプリミティブ型のときは、setProperty()
を呼び出すことが可能で、setDirty()
を呼び出す必要はありません。ただし、プロパティの値が独自のプロパティを持つオブジェクトである場合は、setDirty()
を呼び出してオブジェクト内の値が変更された日時を示します。
パラメーター
propertyName:String — 変更されたプロパティの名前です。
|
関連する API エレメント
setProperty | () | メソッド |
public function setProperty(propertyName:String, value:Object = null):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
共有オブジェクトのプロパティの値を更新し、プロパティの値が変更されたことをサーバーに通知します。setProperty()
メソッドは、プロパティを changed または dirty として明示的にマークします。
リモート共有オブジェクトの詳細については、Flash Media Server のマニュアルを参照してください。
注意:SharedObject.setProperty()
メソッドには、setDirty()
メソッドが実装されています。ほとんどの場合、例えばプロパティの値がストリングや数値のようなプリミティブ型のときは、setProperty()
を使用し、setDirty
を使用することはありません。ただし、プロパティの値が独自のプロパティを持つオブジェクトである場合は、setDirty()
を使用してオブジェクト内の値が変更された日時を示します。一般的には、setProperty()
を呼び出して、setDirty()
は使用しないことをお勧めします。setProperty()
は値が変更されたときだけプロパティ値を更新しますが、setDirty()
はサブスクライブしているすべてのクライアントを強制的に同期させるからです。
パラメーター
propertyName:String — 共有オブジェクトのプロパティの名前です。
| |
value:Object (default = null ) — プロパティの値(ActionScript オブジェクト)です。プロパティを削除する場合は null を指定します。
|
関連する API エレメント
asyncError | イベント |
flash.events.AsyncErrorEvent
プロパティ AsyncErrorEvent.type =
flash.events.AsyncErrorEvent.ASYNC_ERROR
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
非同期形式で、つまりネイティブ非同期コードから例外がスローされると送出されます。
AsyncErrorEvent.ASYNC_ERROR
定数は、type
プロパティ(asyncError
イベントオブジェクト)の値を定義します。
このイベントには、次のプロパティがあります。
プロパティ | 値 |
---|---|
bubbles | false |
cancelable | false は、キャンセルするデフォルトの動作がないことを示します。 |
currentTarget | イベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。 |
target | イベントを送出するオブジェクトです。 |
error | イベントをトリガーしたエラーです。 |
netStatus | イベント |
flash.events.NetStatusEvent
プロパティ NetStatusEvent.type =
flash.events.NetStatusEvent.NET_STATUS
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
SharedObject インスタンスが、そのステータスまたはエラーの状況をレポートするときに送出されます。netStatus
イベントには、info
プロパティが含まれます。このプロパティは、接続試行が成功したかどうかや共有オブジェクトのローカルディスクへの書き込みが成功したかどうかなど、イベントに関する特定の情報を含む情報オブジェクトです。
type
プロパティ(netStatus
イベントオブジェクト)の値を定義します。
このイベントには、次のプロパティがあります。
プロパティ | 値 |
---|---|
bubbles | false |
cancelable | false は、キャンセルするデフォルトの動作がないことを示します。 |
currentTarget | イベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。 |
info | オブジェクトのステータスまたはエラー状態を記述するプロパティを持つオブジェクトです。 |
target | そのステータスを報告する NetConnection または NetStream オブジェクトです。 |
関連する API エレメント
sync | イベント |
flash.events.SyncEvent
プロパティ SyncEvent.type =
flash.events.SyncEvent.SYNC
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
リモート共有オブジェクトがサーバーによって更新されるときに送出されます。
type
プロパティ(sync
イベントオブジェクト)の値を定義します。
このイベントには、次のプロパティがあります。
プロパティ | 値 |
---|---|
bubbles | false |
cancelable | false は、キャンセルするデフォルトの動作がないことを示します。 |
currentTarget | イベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。 |
changeList | 配列のステータスを記述するプロパティを持つ配列です。 |
target | サーバーによって更新された SharedObject インスタンスです。 |
関連する API エレメント
"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; } } }
Tue Jun 12 2018, 10:34 AM Z