2009-10-13 54 views
2

我試圖在as3 swf和它加載的as2 swf之間共享數據。問題是,我似乎無法讓我的as2 swf讀取由as3 swf編寫的localshared對象。當我試圖獲得對共享對象的引用時,它簡單地返回undefined在AS3 swf中寫入本地SharedObject並在加載的AS2中讀取它swf

// AS3 

_SharedObj.objectEncoding = ObjectEncoding.AMF0; 
_SharedObj.data.blah = 'str'; 
_SharedObj.flush(500); 

// ... some code to handle the flush status. I verified that the values were flushed. 


// AS2 

var so = SharedObject.getLocal('somestr', '/'); 
trace(so); // undefined! 

我在這裏不知所措。我可以從AS3讀取AS2共享對象,但我無法以其他方式完成。我已經驗證了兩個引用相同的路徑'/'(特別是本地主機,我甚至檢查過文件系統中的物理文件, - 它位於我的mac上的#SharedObjects目錄的#localhost目錄中)objectEncoding設置爲使用AS2 AMF格式。

該文檔具體說來設置該編碼以允許AS2訪問相同的共享對象,所以我假設它意味着這是可能的。

任何人有任何想法?

+0

你可以發佈關於此文檔的鏈接嗎?順便說一句,如果你不能得到這個工作,考慮使用'LocalConnection'在as3和(加載或其他)as2 swfs之間進行通信。 – Amarghosh 2009-10-14 06:00:30

回答

0

您的問題是爲Flash Player生成的swf id,並將其用於SharedObject使用。你沒有在代碼中看到這個,但是當你搜索SharedObject文件時,你會看到它。這是安全功能。我不知道有什麼解決辦法。

0

我遇到了類似的問題 - 我們最終去讀書的令人髮指的路徑/與AS2 SWF寫入LSO,並讓它交談通過JavaScript/ExternalConnection的AS3 SWF。這是毛病,但它工作可靠。

2

想不通究竟是不是爲你工作,使用FlashDevelop時,下面的代碼工作非常適合我:

//AS3 
var so : SharedObject = SharedObject.getLocal('somestr', '/'); 
so.objectEncoding = ObjectEncoding.AMF0; 
so.data.blah = 'str'; 
so.flush(); 

//AS2 
var so = SharedObject.getLocal('somestr', '/'); 
trace(so.data.blah); // str 
0

我有同樣的問題,我認爲上述杜迪·的答案是要走的路 - 在調用SharedObject.getLocal()之後,我在代碼中添加了以下行,並且我的AS2 swf能夠加載我寫入的AS3寫入的共享對象。

so.objectEncoding = ObjectEncoding.AMF0 

謝謝Dudi!

相關問題