標籤雲

搜尋此網誌

2009/10/20

Flash 的 cookie -- SharedObject 類別

今天要講的是已經存在很久我卻一直沒有機會用到...可以看作 "Flash 的 Cookie"的 ShareObject 類別(flash.net.SharedObject)

這個類別可以把資料存進使用者電腦本機裡
比 cookie 好用的地方在於,它可以存放如 Array 或 Object 這樣的物件資料型態
這樣同一網域下的不同 swf 檔也可以共用資料了
廢話不多說,直接介紹要怎麼用吧~~
(這邊只介紹本機 SharedObject,更詳細用法或遠端 SharedObject 請直接查官方 doc)

1. 建立或取得 SharedObject
先建立一個 SharedObject 實體,然後使用 static 方法 SharedObject.getLocal(name:String, localPath:String = null, secure:Boolean = false) 依照傳入的名稱取得 SharedObject 回傳,若不存在則會建立
例:
var share_so:SharedObject;
share_so = SharedObject.getLocal("localVar");

2. 把需要存放的資料放進 SharedObject 實體的 data 屬性,注意不可直接將資料指給 share_so.data 否則會被忽略
刪除 data 裡的某個資料應使用 delete
例:
share_so.data = this.myData; //無效
share_so.data.myData1 = this.myData1; //正確
share_so.data.items = items_array; //複雜資料型態
share_so.myData2 = this.myData2; //可以,但其他同網域下的 swf 無法存取該屬性,且在該 swf 關閉後也不會被存在本機裡
delete share_so.data.myData3; //刪除 myData3 的資料 (將 myData3 設為 null 或 undefined 並不會刪除它)

3. SharedObject 會在被關閉前自動寫入本機,但可以呼叫 flush(minDiskSpace:int = 0) 立即將 SharedObject 寫到本機。
minDiskSpace 為要求空間大小的位元組(建議一次要夠,因為如果可存取空間小於 minDiskSpace 的話,flash player 會跳出對話方塊要求使用者加大允許空間)
這個方法會回傳 SharedObjectFlushStatus.PENDING 或 SharedObjectFlushStatus.FLUSHED
例:
var flushResult:String = share_so.flush();
if(flushResult == SharedObjectFlushStatus.FLUSHED) trace("寫入完成!");
else if(flushResult == SharedObjectFlushStatus.PENDING) trace("配置的空間不足以儲存此物件");

4. 其他重要屬性
size:uint (ShareObject 目前大小,以位元組為單位。)


不過有幾點要注意:
1.swf檔的尺寸必須大於 215x138。這是為了要在 swf 跳出對話方塊,以便使用者可以更改本機存放的資料大小設定(預設是 100KB)
2.由於存放資料的空間大小是使用者可以變更設定的,所以資料有可能會因為使用者變更設定而遺失
3.隱私權方面,swf 檔僅能讀寫在自己網域內的 SharedObject(但存在本機上的 swf 檔可以隨時將其他網域的共享物件寫入磁碟。)

沒有留言: