[PR]血液型生年月日で運命診断:無料お試しも本格鑑定!





共有オブジェクトとは?




■ 共有オブジェクトについて


共有オブジェクトを使うとユーザーのローカルハードディスクにデータを一時的に決められた場所に保存することができます。保存したデータは、次回起動時に読み込むことが可能です。

また、同一ドメイン内で実行している swf ファイルであれば、同じ共有オブジェクトにアクセスできるので保存したデータの共有ができます。

共有オブジェクトを作成するには、SharedObject クラスを使用します。




■ Macromedia Flash 5 でも作成可能


このメソッドは、Flash 6 以降で使用可能ですが、実は、Macromedia Flash 5 の環境でも作成する事ができます。

ただし動作するのは Flash Player 6 以降なので Macromedia Flash 5 の書き出しプレビュー(デバッグプレイヤー)上では動作しません。 しかし 6 以降の Flash Player で再生すると正しく動作する事が確認できます。









共有オブジェクトを作成して読み込みたい



サンプルをダウンロード




■共有オブジェクトを作成する


まず、SharedObject.getLocal () メソッドを使用して、共有オブジェクトを作成します。


SharedObject.getLocal ( 共有オブジェクト名 , [保存するディレクトリ] ,[HTTPS 経由か?]);
第01引数 共有オブジェクト名を指定
第02引数(略可)保存するディレクトリを指定
第03引数(略可)[Flash 8 以降] HTTPS 経由で配信している SWF ファイルなら true それ以外は false
返り値 SharedObject 型のオブジェクト。セキュリティで弾かれた場合は null


■第01引数 共有オブジェクト名を指定

ここで指定した名称がそのまま 『 共有オブジェクト名.sol 』 というファイル名になり保存されます。

WindowsXP環境での保存場所

C:\Documents and Settings\ユーザー名\Application Data\Macromedia\Flash Player
\#SharedObjects\


■第02引数 保存するディレクトリを指定

保存するディレクトリを指定できますが、実行場所からURLを削る事のみ可能です。
例えば、 http://hakuhin.com/main/swf/shared_obj.swf にて実行されるのであれば

"main/swf/shared_obj.swf" か
"main/swf/" か
"main/" か
"/"

の4通りの指定が可能です。

同一の『共有オブジェクト名』を指定したとしても、『指定したディレクトリ』が違う場合は、別の共有オブジェクトとして新規に作成されます。『共有オブジェクト名』と指定したディレクトリ』が一致しているのであれば、別のディレクトリから実行していても同じ共有オブジェクトにアクセスできます。

"/" と指定した場合、別のディレクトリからアクセスできる可能性が最大となり、同一ドメイン内であれば、どこから実行しても同じ共有オブジェクトにアクセスする事ができます。記述を省略した場合は、"main/swf/shared_obj.swf"と記述したことと同じになります。別ディレクトリからアクセスできる可能性が完全になくなり、このディレクトリに置いた同名のSWFファイル以外からアクセスする事はできません。

ローカル環境で実行している場合は、localhost というドメインとして扱われます。 "/" と指定すると、どこでSWFファイルを実行しても同じ共有オブジェクトにアクセスすることが可能です。

別のドメインで作られた共有オブジェクトへはセキュリティの都合上アクセスすることはできません。


■第03引数 HTTPS 経由で配信されているかを指定(Flash 8 以降で動作)

https 配信されている場合 true に変更すると『セキュアな共有オブジェクト』となり それ以外の http などのプロトコルから実行された場合、『セキュアな共有オブジェクト』にアクセスすることができなくなります。

例えば、https://hakuhin.com/shared_obj.swf で作成した共有オブジェクトがあるとします。 https://hakuhin.com/swf/shared_obj.swf からはアクセスすることができますが http://hakuhin.com/shared_obj.swf や http://hakuhin.com/swf/shared_obj.swf などの別プロトコルからはアクセスできません。




共有オブジェクトを作成する

var so = SharedObject.getLocal("my_data");


他からアクセスされる可能性が高い共有オブジェクトを作成する

var so = SharedObject.getLocal("my_data","/");





■共有オブジェクトからデータを取り出す


すでにローカルハードディスクにデータが保存されている場合、共有オブジェクトを作った時点で data プロパティにデータが格納されているので取り出して使用します。

共有オブジェクトからデータを取り出す

var so = SharedObject.getLocal("my_data");
if(so){
	var obj = so.data;

	trace(obj.num);
	trace(obj.str);
	trace(obj.ary);
	trace(obj.obj);
}







共有オブジェクトを保存したい




■共有オブジェクトにデータを書き込む


共有オブジェクトにデータを書き込むには、data プロパティにアクセスします。data プロパティはオブジェクトになっているので好きなプロパティ名をぶら下げてデータを格納していきます。 オブジェクト型で格納するとまとめて書き込んだり取り出したりできるのでお勧めです。


共有オブジェクトにデータを書き込む

var so = SharedObject.getLocal("my_data");
if(so){
	var obj = so.data;

	obj.num = 123;
	obj.str = "書き込みテスト";
	obj.ary = ["配","列","テ","ス","ト"];
	obj.obj = {data:"オブジェクトテスト"};
}





■ハードディスクへ書き込む

ハードディスクへすぐに書き込みを試みるには、flush() メソッドを使用します。引数にユーザーに要求する書き込みたいバイト数を指定します。 ユーザーの設定によって制限されているバイト数以上のデータを書き込もうとしたときは、FlashPlayer上で確認用のダイアログが表示されます。






また、返り値の値により正常に書き込まれたか知ることができます。


ハードディスクへ書き込む

var so = SharedObject.getLocal("my_data");
if (so) {
	var obj = so.data;

	obj.num = 123;
	obj.str = "書き込みテスト";
	obj.ary = ["配","列","テ","ス","ト"];
	obj.obj = {data:"オブジェクトテスト"};


	var ret = so.flush(300);

	switch(ret){
	case true:
		trace ("正常にハードディスクに書き込めました。");
		break;
	case "pending":
		trace ("ユーザーにハードディスク書き込み要求を出します。");
		break;
	case false:
		trace ("書き込みに失敗しました。");
		break;
	}
}


flush() メソッドを呼び出さなくても共有オブジェクトがガベージコレクションに回収されるタイミングで自動的にハードディスクに書き込み処理が走ります。





■ユーザーがハードディスクへの書き込み許可を出したか調べる

共有オブジェクトは onStatus イベントに対応しています。


onStatus イベントを受け取る

var so = SharedObject.getLocal("my_data");

if(so){

	so.onStatus = function (info){
		switch(info.code){
		case "SharedObject.Flush.Success":
			trace("ユーザーがハードディスク書き込み許可ボタンを押した");
			break;
		case "SharedObject.Flush.Failed":
			trace("ユーザーがハードディスク書き込み拒否ボタンを押した");
			break;
		}
	}

	var obj = so.data;

	obj.num = 123;
	obj.str = "書き込みテスト";
	obj.ary = ["配","列","テ","ス","ト"];
	obj.obj = {data:"オブジェクトテスト"};

	var ret = so.flush(300);
	
	switch(ret){
	case true:
		trace ("正常にハードディスクに書き込めました。");
		break;
	case "pending":
		trace ("ユーザーにハードディスク書き込み要求を出します。");
		break;
	case false:
		trace ("書き込みに失敗しました。");
		break;
	}
}





■共有オブジェクトの使用バイト数を調べる

共有オブジェクトのデータがどれだけバイト数を使用しているかを調べるには、getSize () メソッドを調べます。


共有オブジェクトのサイズを調べる

var so = SharedObject.getLocal("my_data");

if(so){
	trace(so.getSize());

	var obj = so.data;
	obj.num = 123;
	obj.str = "書き込みテスト";
	obj.ary = ["配","列","テ","ス","ト"];
	obj.obj = {data:"オブジェクトテスト"};

	trace(so.getSize());
}







共有オブジェクトを削除したい




■ローカルハードディスクに保存した共有オブジェクトを削除する

ユーザーのローカルハードディスクに保存された共有オブジェクトを削除するには、clear メソッドを呼び出します。


共有オブジェクトを削除する

var so = SharedObject.getLocal("my_data");

if(so){

	so.clear();

}









[PR]国仲涼子さんの美肌のヒミツ:蜂蜜配合の美肌スキンケア≪ハニーラボ≫