LSO使用二进制的AMF(Action Message Format)对一个对象进行编码.当你在LSO储存类对象时,该对象会编码成包含内容属性的普通对象.于是,当你试着从共享对象里读取该对象时,无法被读成某类的对象,因为没有类型数据.要克服这个限制,使用flash.net.registerClassAlias()方法.
任何影片中,只要从共享对象读取出自定义对象数据,自定义类就必须注册别名,而且调用registerClassAlias()方法时必须在SharedObject.getLocal()方法被调用之前.
- 作者:SWFAQ | http://swfaq.org
首先LSO是储存在以下目录下:
C:\Documents and Settings\[user name]\Application Data\Macromedia\Flash Player\#SharedObjects
例如,如果来自于http://www.riahome.cn/youthoy的影片movie.swf写入名为example的LSO,则数据会储存在以下位置:
C:\Documents and Settings\[user name]\Application Data\Macromedia\Flash Player\#SharedObjects\[random directory name]\riahome.cn\youthoy\movie.swf\example.sol
如果在这个movie.swf里的代码是这样的: var example:SharedObject = SharedObject.getLocal(“example”, “/”); 也就是使用了选用的本地路径参数,则LSO会储存在以下路径,注意到与以上路径少了”youthoy\movie.swf”:
C:\Documents and Settings\[user name]\Application Data\Macromedia\Flash Player\#SharedObjects\[random directory name]\riahome.cn\example.sol
以此方法建立的LSO,可以由相同域的其它Flash影片用以下程序来读取:
var example:SharedObject = SharedObject.getLocal(“example”, “/”);
再看一个例子:
有两个Flash影片movieOne.swf和movieTwo.swf都位于同一域(http://www.riahome.cn)内,但是,movieOne.swf位于http://www.riahome.cn/youthoy/firstGroup,而movieTwo.swf位于http://www.riahome.cn/youthoy/secondGroup.在这情况里,movieOne.swf可以用下列任何本地路径建立和读取LSO:
/
/youthoy
/youthoy/firstGroup
而movieTwo.swf可以用下列任何本地路径建立和读取LSO:
/
/youthoy
/youthoy/secondGroup
因此,如果你想要两个影片都可以读取相同LSO,当你调用getLocal()方法时,必须指定影片共享的两个本地路径之一(/或/youthoy).
- 作者:SWFAQ | http://swfaq.org
A 使用 B 的 SharedObject
A类:
public function A() // 构造函数
{
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, ok);
loader.load(new URLRequest(“http://swfaq.org/B/B.swf”));
this.addChild(loader);
}
private function ok(event:Event):void
{
var b:* = loader.content;
ExternalInterface.call(“alert”, b.getBSO());
}
B类:
public function getBSO():*
{
Security.allowDomain(“*”);
so = SharedObject.getLocal(“B”);
if (!so.data.map)
{
so.data.map = this.loaderInfo.url;
}
return so.data.map;
}
- 作者:SWFAQ | http://swfaq.org