在AS3 swf中编写本地SharedObject并在加载的AS2 swf中读取它

时间:2009-10-13 20:25:20

标签: flash actionscript-3 actionscript-2 shared-objects

我正在尝试在as3 swf和它加载的as2 swf之间共享数据。问题是,我似乎无法让我的as2 swf读取as3 swf编写的localshared对象。当我尝试获取对共享对象的引用时,它只返回undefined

// 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共享对象,但我不能这样做。我已经验证两者都引用相同的路径'/'(特别是localhost,我甚至检查了文件系统中的物理文件, - 它在我的mac上的#SharedObjects目录的#localhost目录中)objectEncoding设置为使用AS2 AMF格式。

文档特别说要设置此编码以允许as2访问同一个共享对象,所以我认为这意味着这是可能的。

有人有什么想法吗?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您的问题是为Flash Player生成的swf id,并由它用于SharedObject使用。您没有在代码中看到这一点,但是当您搜索SharedObject文件时,您会看到它。这是安全功能。我不知道有任何解决方法。

答案 2 :(得分:0)

我遇到了类似的问题 - 我们最终选择了使用AS2 SWF读取/编写LSO的令人发指的路线,并通过JavaScript / ExternalConnection与AS3 SWF进行通信。这很糟糕,但它可靠地运作。

答案 3 :(得分:0)

我有同样的问题,我认为Dudi上面的答案是要走的路 - 我在调用SharedObject.getLocal()之后在我的代码中添加了以下行,并且我的AS2 swf能够加载我的AS3编写的共享对象。

so.objectEncoding = ObjectEncoding.AMF0

谢谢杜迪!