17.7.Flash程序之间共享数据

问题
我想要同一个域中的两个swf文件能访问同一个LSO。
解决办法
当创建或打开LSO时指定本地路径参数。
讨论
默认情况下,LSOs存储的名称是唯一的,这主要是为了防止名称冲突,例如,在Windows XP,如果电影剪辑名称为movie.swf,放在http://www.person13.com/ascb路径下,写入时LSO名称为example,则保存的路径为:C:\Documents and Settings\[user name]\Application Data\Macromedia\Flash
Player\#SharedObjects\[random directory name]\person13.com\ascb\movie.swf\example.sol

.swf文件的名称都包含在路径中,这样的话其他的swf即使在同一个域和路径下也不会冲突,因为各自都有自己相关的LSO,但是有时候,如果想让两个电影剪辑访问同一个LSO,这时,调用getLocal( )需传入一个可选参数:本地路径,来打开或创建LSO。

本地路径参数(getLocal( )第二个参数)为绝对或相对路径字符串,指定LSO的存储位置,例如:
+展开
-ActionScript
var example:SharedObject = SharedObject.getLocal( "example""/" );

如果movie.swf放在http://www.person13.com/ascb, 根据上面的代码那么LSO就会保存在:C:\Documents and Settings\[user name]\Application Data\Macromedia\Flash
Player\#SharedObjects\[random directory name]\person13.com\example.sol

这个目录的不同点是缺少电影剪辑的信息,这样创建的LSO可以被同一个域的其他flash电影所共享访问:
+展开
-ActionScript
var example:SharedObject = SharedObject.getLocal( "example""/" );

正确理解绝对路径和相对路径是很重要的,这里举个例子,比如有两个swf文件:movieOne.swf 和movieTwo.swf. 两个都放在同一个域(http:// www.person13.com) 但是在不同的路径下。movieOne.swf 在http:// www.person13.com/ascb/firstGroup, movieTwo.swf 在http://www.person13.com/ascb/secondGroup,这样movieOne.swf 能创建和读取的本地路径为:
/
/ascb
/ascb/firstGroup

movieTwo.swf 能创建和读取的本地路径为:
/
/ascb
/ascb/secondGroup

因此,如果要创建两个swf都能访问的公共LSO,则getLocal ( ) 方法的第二个参数必须是(/ 或/ascb)

为了展示如何共享LSO,我们看一下下面的例子:

1.
创建新的swf文件,包含下列代码,命名为movieA.swf:
+展开
-ActionScript
var count:SharedObject = SharedObject.getLocal( "count" );
// 第一次读取,默认值为0
if ( count.data.value == undefined ) {
count.data.value = 0;
else {
// 每次读取,value自动加1
count.data.value++;
}
// 创建text field显示值
var output:TextField = new TextField( );
output.text = "count value: " + count.data.value;
addChild( output );


2.
在电脑上建个新目录,名称为LSOTest.
3.
在LSOTest目录下创建两个子目录:movieAPath 和movieBPath.

4.
拷贝movieA.swf文件到两个的子目录

5.
重名名movieBPath目录下的movieA.swf 为movieB.swf

6.
多打开及关闭movieA.swf几次,每次打开,count值都会加1

7.
多打开及关闭movieB.swf几次,每次打开,count值都会加1,但是注意到初始值是从0开始,也就是说,movieA.swf和movieB.swf 使用各自的LSO,虽然LSO的名字相同,但是放在不同的路径里。

8.
要让两个swf使用同一个LSO,必须指定本地路径参数,像这样:

9.
+展开
-ActionScript
var count:SharedObject = SharedObject.getLocal( "count""/" );


10.
这将导致两个swf在同一个路径下寻找LSO,因此他们使用了同一个文件.

加支付宝好友偷能量挖...


评论(0)网络
阅读(117)喜欢(0)flash/flex/fcs/AIR