| 包 | flash.net |
| 类 | public class SharedObject |
| 继承 | SharedObject EventDispatcher Object |
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
NetStream 类中的一些属性和方法主要用于服务器(如 Flash Media Server 2 或 Flex)。 它们可能包含更多的服务器端功能。 有关其它文档,请参阅 Flash Media Server documentation中的 NetStream 类。
下文介绍了共享对象的三种常见用法:
SharedObject.getLocal() 在 Flash Player 应用程序中创建共享对象,如带记忆功能的计算器。 用户关闭计算器时,Flash Player 将在用户计算机的共享对象中保存最后一个值。 计算器下一次运行时,将包含先前所拥有的值。 或者,在计算器应用程序关闭之前,如果将共享对象属性设置为 null,那么,当应用程序在下一次运行时,将不带任何先前值。维护本地永久性的另一示例就是跟踪用户首选项或复杂网站的其它数据,如用户在新闻网站上所阅读文章的记录。 跟踪此信息将允许您以不同方式分别显示已经阅读的文章和新的未读文章。 在用户计算机上存储此信息可减小服务器负载。
若要创建本地共享对象,请使用以下语法:
var so:SharedObject = SharedObject.getLocal("userHighScore");
so.data.highScore = new Number(1234567890);
so.flush();
在示例中,共享对象被显式刷新,或被写入磁盘。 在应用程序关闭时,将自动刷新共享对象;但此处显示刷新是为了说明将数据写入磁盘的步骤。
本地磁盘空间注意事项:本地共享对象将非常有用,但它们也有一些限制,这些限制很重要,您在设计应用程序时应予以考虑。 有时可能不允许 SWF 文件写入本地共享对象,有时可能在您不知情的情况下删除在本地共享对象中存储的数据。 Flash Player 用户可以管理对单个域或所有域可用的磁盘空间。 当用户减少可用磁盘空间时,一些本地共享对象可能会被删除。 Flash Player 用户还具有隐私控制能力,它们可防止第三方域(当前浏览器地址栏中域之外的域)读取或写入本地共享对象。
注意:在本地计算机上(而不是从远程服务器)存储和运行的 SWF 文件始终可以将第三方共享对象写入磁盘,即便用户不允许由第三方域将共享对象写入磁盘。 有关第三方共享对象的详细信息,请参阅 Global Storage Settings panel中有关第三方内容的论述。
Adobe 建议您检查与磁盘空间数量和用户隐私控制相关的故障。 在调用 getLocal() 和 flush() 时执行这些检查:
SharedObject.getLocal() -- 调用此方法失败时(如用户禁用了第三方共享对象,并且您的 SWF 文件的域与浏览器地址栏中的域不匹配),Flash Player 将引发异常。SharedObject.flush() -- 调用此方法失败时,Flash Player 将引发异常。 调用成功时,将返回 SharedObjectFlushStatus.FLUSHED。 需要额外存储空间时,将返回 SharedObjectFlushStatus.PENDING。 Flash Player 提示用户增加本地保存信息的存储空间。 随后,对 netStatus 事件进行调度,同时信息对象将指示刷新是否成功。如果您的 SWF 文件尝试创建或修改本地共享对象,请确保 SWF 文件的宽度至少为 215 像素,高度至少为 138 像素,这是用于显示提示用户增加其本地共享对象存储限制的对话框的最小尺寸。 如果您的 SWF 文件小于这些尺寸,且需要增加存储限制,则 SharedObject.flush() 失败,返回 SharedObjectFlushedStatus.PENDING,并调度 netStatus 事件。
另请参见
| 属性 | 定义方 | ||
|---|---|---|---|
| client : Object
指示对其调用回调方法的对象。
| SharedObject | ||
![]() | constructor : Object
对类对象或给定对象实例的构造函数的引用。
| Object | |
| data : Object
[read-only]
赋给对象的 data 属性 (property) 的属性 (attribute) 集合;可以共享和存储这些属性 (attribute)。
| SharedObject | ||
| defaultObjectEncoding : uint
[static]
在 SWF 文件中创建的所有本地共享对象的默认对象编码(AMF 版本)。
| SharedObject | ||
| fps : Number
[write-only]
指定每秒钟客户端对共享对象所做的更改被发送到服务器的次数。
| SharedObject | ||
| objectEncoding : uint
此共享对象的对象编码(AMF 版本)。
| SharedObject | ||
![]() | prototype : Object
[static]
对类或函数对象的原型对象的引用。
| Object | |
| size : uint
[read-only]
共享对象的当前大小(以字节为单位)。
| SharedObject | ||
| 方法 | 定义方 | ||
|---|---|---|---|
![]() |
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。
| EventDispatcher | |
|
对于本地共享对象,清除所有数据并从磁盘删除共享对象。
| SharedObject | ||
|
关闭远程共享对象和服务器间的连接。
| SharedObject | ||
|
通过指定的连接连接到服务器上的远程共享对象。
| SharedObject | ||
![]() |
将事件调度到事件流中。
| EventDispatcher | |
|
将本地永久共享对象立即写入本地文件。
| SharedObject | ||
|
[static]
返回对本地永久共享对象的引用,该对象只可用于当前客户端。
| SharedObject | ||
|
getRemote(name:String, remotePath:String = null, persistence:Object = false, secure:Boolean = false):SharedObject
[static]
对借助服务器(如 Flash Media Server)在多个客户端间共享的对象返回一个引用。
| SharedObject | ||
![]() |
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。
| EventDispatcher | |
![]() |
指示对象是否已经定义了指定的属性。
| Object | |
![]() |
指示 Object 类的实例是否在指定为参数的对象的原型链中。
| Object | |
![]() |
指示指定的属性是否存在、是否可枚举。
| Object | |
![]() |
从 EventDispatcher 对象中删除侦听器。
| EventDispatcher | |
|
对连接到指定远程共享对象的所有客户端(包括发送该消息的客户端)广播一条消息。
| SharedObject | ||
|
通知服务器共享对象的属性(用 data 属性定义)值已更改。
| SharedObject | ||
|
更新共享对象中某个属性(用 data 属性定义)的值,并通知服务器该属性的值已更改。
| SharedObject | ||
![]() |
设置循环操作动态属性的可用性。
| Object | |
![]() |
返回指定对象的字符串表示形式。
| Object | |
![]() |
返回指定对象的原始值。
| Object | |
![]() |
检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。
| EventDispatcher | |
| 事件 | 摘要 | 定义方 | ||
|---|---|---|---|---|
![]() | Flash Player 获得操作系统焦点并变为活动状态时调度。 | EventDispatcher | ||
| 在异步引发异常(即来自本机异步代码)时调度。 | SharedObject | |||
![]() | Flash Player 失去操作系统焦点并变为非活动状态时调度。 | EventDispatcher | ||
| 在 SharedObject 实例报告其状态或错误情况时调度。 | SharedObject | |||
| 在服务器更新了远程共享对象(SharedObject)后调度。 | SharedObject | |||
| client | 属性 |
client:Object [read-write]
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
指示对其调用回调方法的对象。 默认对象为 this。 您可以将此客户端属性设置为其它对象,并对此对象调用回调方法。
public function get client():Object
public function set client(value:Object):void
TypeError — 必须将 client 属性设置为非空对象。
|
| data | 属性 |
data:Object [read-only]
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
赋给对象的 data 属性 (property) 的属性 (attribute) 集合;可以共享和存储这些属性 (attribute)。 每个特性都可以是任何 ActionScript 或 JavaScript 类型的对象(数组、数字、布尔值、字节数组、XML,等等)。 例如,下面几行将值赋给共享对象的不同方面:
var items_array:Array = new Array(101, 346, 483);
var currentUserIsAdmin:Boolean = true;
var currentUserName:String = "Ramona";
var my_so:SharedObject = SharedObject.getLocal("superfoo");
my_so.data.itemNumbers = items_array;
my_so.data.adminPrivileges = currentUserIsAdmin;
my_so.data.userName = currentUserName;
for (var prop in my_so.data) {
trace(prop+": "+my_so.data[prop]);
}
如果对象是永久的,将保存共享对象的 data 属性 (property) 的所有属性 (attribute),共享对象包含以下信息:
userName: Ramona adminPrivileges: true itemNumbers: 101,346,483
注意:切勿将值直接赋给共享对象的 data 属性,如同在 so.data = someValue 中一样;Flash Player 将忽略这些赋值。
若要删除本地共享对象的属性,请使用诸如 delete so.data.attributeName 这样的代码;将本地共享对象的属性设置为 null 或 undefined 不会删除该属性。
若要为共享对象创建私有 值(该对象正在使用时只有客户端实例才可以使用该值,并且该值在对象关闭时不与该对象存储在一起),请创建名称不是 data 的属性来存储它们,如下例所示:
var my_so:SharedObject = SharedObject.getLocal("superfoo");
my_so.favoriteColor = "blue";
my_so.favoriteNightClub = "The Bluenote Tavern";
my_so.favoriteSong = "My World is Blue";
for (var prop in my_so) {
trace(prop+": "+my_so[prop]);
}
共享对象包含以下数据:
favoriteSong: My World is Blue favoriteNightClub: The Bluenote Tavern favoriteColor: blue data: [object Object]
public function get data():Object
另请参见
| defaultObjectEncoding | 属性 |
defaultObjectEncoding:uint [read-write]
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
在 SWF 文件中创建的所有本地共享对象的默认对象编码(AMF 版本)。 在将本地共享对象写入磁盘时,SharedObject.defaultObjectEncoding 属性将指示应使用的 Action Message Format 的版本:ActionScript 3.0 格式 (AMF3)、ActionScript 1.0 还是 2.0 格式 (AMF0)。
关于对象编码的详细信息(包括本地和远程共享对象编码的差异),请参阅 objectEncoding 属性的描述。
SharedObject.defaultObjectEncoding 的默认值设置为使用 ActionScript 3.0 格式 (AMF3)。 如果要创建 ActionScript 2.0 或 1.0 SWF 文件可以读取的本地共享对象,则应在创建任何本地共享对象之前,在脚本起始处将 SharedObject.defaultObjectEncoding 设置为使用 ActionScript 1.0 或 ActionScript 2.0 格式 (flash.net.ObjectEncoding.AMF0)。 随后创建的所有本地共享对象都将使用 AMF0 编码,并可与旧内容交互。 本地共享对象创建后,将无法通过设置 SharedObject.defaultObjectEncoding 来更改现有本地共享对象的 objectEncoding 值。
若要以每个对象为基础设置对象编码,而不是为 SWF 文件创建的所有共享对象设置对象编码,则应设置本地共享对象的 objectEncoding 属性。
public static function get defaultObjectEncoding():uint
public function set defaultObjectEncoding(value:uint):void
另请参见
| fps | 属性 |
fps:Number [write-only]
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
指定每秒钟客户端对共享对象所做的更改被发送到服务器的次数。
如果希望控制客户端与服务器之间的通信量,可以使用此方法。 例如,如果客户端与服务器之间的连接相对较慢,可以将 fps 设置为一个相对较小的值。 相反,如果客户端连接到一个对时间具有高要求的多用户应用程序,可能需要将 fps 设置为一个相对较大的值。
设置 fps 将触发 sync 事件并更新对服务器的所有更改。 如果只想手动更新服务器,可将 fps 为 0。
在调度 sync 事件之前,不会将更改发送给服务器。 也就是说,如果服务器的响应时间较慢,向服务器发送更新的频率则可能小于此属性中的指定值。
public function set fps(value:Number):void
| objectEncoding | 属性 |
objectEncoding:uint [read-write]
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
此共享对象的对象编码(AMF 版本)。 在将本地共享对象写入磁盘时,objectEncoding 属性将指示应使用的 Action Message Format 的版本:ActionScript 3.0 格式 (AMF3)、ActionScript 1.0 还是 2.0 格式 (AMF0)。
根据共享对象是本地还是远程来执行不同的对象编码操作。
objectEncoding 属性值。 objectEncoding 的值影响在写入 此本地共享对象时使用的格式设置。 如果此本地共享对象必须能被 ActionScript 2.0 或 1.0 SWF 文件读取,则应将 objectEncoding 设置为 ObjectEncoding.AMF0。 即便对象编码设置为写入 AMF3,Flash Player 仍然能够读取 AMF0 本地共享对象。 也就是说,如果使用此属性的默认值,即 ObjectEncoding.AMF3,则您的 SWF 文件仍然能够读取由 ActionScript 2.0 或 1.0 SWF 文件创建的共享对象。
objectEncoding 设置。 未连接到服务器时,远程共享对象从关联的 NetConnection 实例继承 defaultObjectEncoding 设置。
因为远程共享对象的 objectEncoding 属性值由 NetConnection 实例决定,所以此属性对远程共享对象为只读。
public function get objectEncoding():uint
public function set objectEncoding(value:uint):void
ReferenceError — 您尝试为某个远程共享对象设置 objectEncoding 属性值。 对于远程共享对象而言,此属性为只读,因为其值由关联的 NetConnection 实例决定。
|
另请参见
| size | 属性 |
size:uint [read-only]
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
共享对象的当前大小(以字节为单位)。
Flash 通过逐一计算共享对象的每个数据属性计算该对象的大小;对象具有的数据属性越多,评估其大小所花的时间就越长。 评估对象大小可能要耗费相当长的处理时间,因此,除非您对它具有特定的需要,否则您可能希望避免使用此方法。
public function get size():uint
另请参见
"thehobbit" 创建 SharedObject 对象。 将名为 username 的属性添加到 SharedObject 对象的数据属性中。 然后跟踪 size 属性,这将返回指示的值。
import flash.net.SharedObject;
// if these get copied or not
var mySo:SharedObject = SharedObject.getLocal("thehobbit");
mySo.data.username = "bilbobaggins";
trace(mySo.size); // 55| clear | () | 方法 |
public function clear():void
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
对于本地共享对象,清除所有数据并从磁盘删除共享对象。 对共享对象的引用仍然处于活动状态,但其数据属性被删除。
hostName 的 ID 创建(并在后续执行过程中检索)一个 SharedObject 对象。 将名为 username 的属性添加到 SharedObject 对象的数据属性中。 最后调用 clear() 方法,以清除添加到数据对象的所有信息(在本例中是一个名为 username 属性)。
package {
import flash.net.SharedObject;
public class SharedObject_clear {
private var hostName:String = "yourDomain";
private var username:String = "yourUsername";
public function SharedObject_clear() {
var mySo:SharedObject = SharedObject.getLocal(hostName);
if(mySo.data.username == null) {
mySo.data.username = username;
trace("set: " + mySo.data.username); // yourUsername
}
else {
mySo.clear();
trace("cleared: " + mySo.data.username); // undefined
}
}
}
}| close | () | 方法 |
public function close():void
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
关闭远程共享对象和服务器间的连接。 如果一个远程共享对象永久储存在本地,那么在此方法被调用后,用户可以对该对象的本地副本进行更改。 对本地对象的任何更改都将在用户下一次连接到远程共享对象时发送给服务器。
| connect | () | 方法 |
public function connect(myConnection:NetConnection, params:String = null):void
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
通过指定的连接连接到服务器上的远程共享对象。 在发出 SharedObject.getRemote() 命令之后使用此方法。 成功连接后,调度 sync 事件。
在尝试操作远程共享对象之前,首先应检查是否有指示连接成功的返回值 true,然后等待至 sync 事件被调度。 如果不这么做,那么您在 sync 事件被调度之前对本地对象所做的任何改动将有可能丢失。
注意:如果此调用返回 false,则不会调度 sync 事件。
参数
myConnection:NetConnection — 一个使用实时消息传递协议 (RTMP) 的 NetConnection 对象(如用于与 Flash Media Server 进行通信的对象)。
|
|
params:String (default = null) — 一个字符串,定义要传递到 Flash Media Server 的参数。 这些参数在对象名称之后传递。 例如,下面的代码将消息 "mo?foo=false" 传递到 Flash Media Server:
var myNC:NetConnection = new NetConnection();
myNC.connect("rtmp://[myDomain].com/applicationName");
var myRemoteSO:SharedObject = SharedObject.getRemote("mo", myNC.uri, false);
myRemoteSO.connect(myNC, "foo=false");params 参数。
|
Error — Flash Player 无法连接到指定的远程共享对象。 确认 NetConnection 实例有效并已连接,且已在服务器上成功创建远程共享对象。
|
另请参见
| flush | () | 方法 |
public function flush(minDiskSpace:int = 0):String
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
将本地永久共享对象立即写入本地文件。 如果不使用此方法,则 Flash Player 会在共享对象会话结束时(也就是说,在 SWF 文件关闭时,在由于不再有对共享对象的任何引用而将其作为垃圾回收时,或者在调用 SharedObject.clear() 或 SharedObject.close() 时),将共享对象写入文件。
如果此方法返回 SharedObjectFlushStatus.PENDING,则 Flash Player 将显示一个对话框,要求用户增加磁盘空间量以供此域中的对象使用。 若要允许将来保存共享对象时其空间能够增长,从而避免返回值 PENDING,请为 minDiskSpace 传递一个值。 当 Flash Player 尝试写入文件时,它将查找传递给 minDiskSpace 的字节数,而不是查找足够的空间以共享对象的当前大小来保存共享对象。
例如,如果预期共享对象增长到最大为 500 个字节,则即使它开始时要小得多,也为 minDiskSpace 传递 500。 如果 Flash 要求用户为该共享对象分配磁盘空间,它将要求 500 个字节。 在用户分配了请求的空间量之后,当以后尝试对齐该对象时(只要其大小不超过 500 个字节),Flash 将无需要求更多的空间。
在用户响应对话框后,利用值为 SharedObject.Flush.Success 或 SharedObject.Flush.Failed 的 code 属性,再次调用此方法并调度 netStatus 事件。
参数
minDiskSpace:int (default = 0) — 必须分配给此对象的最小磁盘空间(以字节为单位)。
|
String — 下列任一值:
|
Error — Flash Player 不能将共享对象写入磁盘。 如果用户已永久禁止对来自该域的对象进行本地信息存储,则可能出现此错误。
注意:本地内容始终可以将来自第三方域(当前浏览器地址栏中的域以外的域)的共享对象写入磁盘,即使禁止将第三方共享对象写入磁盘。 |
另请参见
hostName 的 ID 创建(并在后续执行过程中检索)一个 SharedObject 对象。 将名为 username 的属性添加到 SharedObject 对象的数据属性中。 然后调用 flush() 方法,并检查以确定返回的是字符串 pending 还是 true 或 false 的布尔值。 务必注意:打开的所有 SharedObject 实例都将在 Flash Player 的当前实例关闭时自动刷新。
package {
import flash.net.SharedObject;
public class SharedObject_flush {
private var hostName:String = "yourDomain";
private var username:String = "yourUsername";
public function SharedObject_flush() {
var mySo:SharedObject = SharedObject.getLocal(hostName);
mySo.data.username = username;
var flushResult:Object = mySo.flush();
trace("flushResult: " + flushResult);
trace(mySo.data.username); // yourUsername
}
}
}| getLocal | () | 方法 |
public static function getLocal(name:String, localPath:String = null, secure:Boolean = false):SharedObject
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
返回对本地永久共享对象的引用,该对象只可用于当前客户端。 如果尚不存在共享对象,则此方法将创建一个共享对象。 如果传递给 getLocal() 的任何值均无效,或如果调用失败,Flash Player 将引发异常。
以下代码显示如何将返回的共享对象引用赋给变量:
var so:SharedObject = SharedObject.getLocal("savedData");
注意:如果用户已选择了从不允许此域进行本地存储,则即使指定了 localPath 的值,对象也不会在本地保存。 本地内容不遵循此规则。 本地内容始终可以将第三方域(当前浏览器地址栏中域之外的域)中的共享对象写入磁盘,即使禁止将第三方共享对象写入磁盘。
为了避免名称冲突,Flash 会考虑创建共享对象的 SWF 文件的位置。 例如,如果位于 www.myCompany.com/apps/stockwatcher.swf 的 SWF 文件创建了一个名为 portfolio 的共享对象,则该共享对象不会与位于 www.yourCompany.com/photoshoot.swf 的 SWF 文件所创建的另一个名为 portfolio 的对象冲突,这是因为这两个 SWF 文件源于不同的目录。
虽然 localPath 参数是可选的,但是您应该考虑该参数的用途,特别是其它 SWF 文件需要访问共享对象时。 如果共享对象中的数据特定于一个不会移动到其它位置的 SWF 文件,则使用默认值将会解决问题。 如果其它 SWF 文件需要访问共享对象,或如果创建共享对象的 SWF 文件以后将发生移动,则此参数的值将影响共享对象的可访问性。 例如,如果在 localPath 设置为等于 SWF 文件完整路径的默认值时创建一个共享对象,那么其它任何 SWF 文件都将无法访问该共享对象。 如果您以后将原始的 SWF 文件移动到另一个位置,那么,即便是该 SWF 文件也将无法访问已经存储在共享对象中的数据。
为避免意外限制对共享对象的访问,请使用 localpath 参数。 允许级别最高的方法是将 localPath 设置为 /(斜杠),这样做可使域中的所有 SWF 文件都可访问该共享对象,但会增加与域中其它共享对象发生名称冲突的可能性。 限制级别较高的方法是向 localPath 追加 SWF 文件完整路径中的文件夹名。 例如,对于位于 www.myCompany.com/apps/stockwatcher.swf 的 SWF 文件创建的 portfolio 共享对象,可以将 localPath 参数设置为/、/apps 或 /apps/stockwatcher.swf。 您必须确定哪种方法能为您的应用程序提供最佳的灵活性。
使用此方法时,请考虑 Flash Player 安全模型:
假定您将要回放的 SWF 文件内容发布为本地文件(本地安装的 SWF 文件或 EXE 文件)而且,您需要从多个本地 SWF 文件访问某个特定的共享对象。 在这种情况下,请注意:对于本地文件而言,可能会使用两个不同位置来存储共享对象。 所用的域取决于为创建该共享对象的本地文件授予的安全权限。 本地文件可以具有三种不同级别的权限:
可以访问本地文件系统(1 级或 3 级)的本地文件将其共享对象存储在一个位置。 无法访问本地文件系统(2 级)的本地文件将其共享对象存储在另一位置。
可以在包含 SWF 内容的 HTML 页中设置 object 和 embed 标签的 allowNetworking 参数,防止 SWF 文件使用此方法。
有关详细信息,请参阅以下部分:
参数
name:String — 对象的名称。 该名称可以包含正斜杠 (/);例如,work/addresses 是合法名称。 共享对象名称中不允许使用空格,也不允许使用以下字符:
~ % & \ ; : " ' , < > ? # |
|
localPath:String (default = null) — 创建了共享对象的 SWF 文件的完整路径或部分路径,这将确定共享对象的本地存储位置。 如果未指定此参数,则使用完整路径。
|
|
secure:Boolean (default = false) — 确定对此共享对象的访问是否只限于通过 HTTPS 连接传递的 SWF 文件。 如果 SWF 文件通过 HTTPS 传递,则此参数值具有以下效果:
如果您的 SWF 文件是通过非 HTTPS 连接传递的,并且您尝试将此参数设置为 下面的图示说明了
|
SharedObject — 一个对共享对象的引用,该共享对象永久贮存在本地并且只可用于当前客户端。 如果 Flash Player 无法创建或找到共享对象(例如,指定了 localPath 但不存在此目录时),此方法将引发异常。
|
Error — 不论什么原因,Flash Player 均不能创建共享对象。 如果禁止第三方 Flash 内容创建或存储永久共享对象,将出现此错误。 用户可以在“设置管理器”的“全局存储设置”面板上禁止第三方永久共享对象,相关设置请参阅 http://www.adobe.com/support/documentation/cn/flashplayer/help/settings_manager03.html。
|
另请参见
| getRemote | () | 方法 |
public static function getRemote(name:String, remotePath:String = null, persistence:Object = false, secure:Boolean = false):SharedObject
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
对借助服务器(如 Flash Media Server)在多个客户端间共享的对象返回一个引用。 如果尚不存在共享对象,则此方法将创建一个共享对象。
以下代码显示如何将返回的共享对象引用赋给变量:
var myRemote_so:SharedObject = SharedObject.getRemote(name, remotePath, persistence);
若要创建只可用于当前客户端的共享对象,请使用 SharedObject.getLocal()。
调用此方法后,请使用 SharedObject.connect() 将对象连接到应用程序服务器,如下列代码所示:
var myNC:NetConnection = new NetConnection();
myNC.connect("rtmp://[yourDomain].com/applicationName");
var myRemoteSO:SharedObject = SharedObject.getRemote("mo", myNC.uri, false);
myRemoteSO.connect(myNC);
若要确认共享对象的本地副本和远程副本已同步,请使用 sync 事件。
希望共享此对象的所有客户端必须为 name 和 remotePath 参数传递相同的值。 有关远程共享对象的其它信息,请参阅 Flash Media Server 文档中的 SharedObject.getRemote()。
参数
name:String — 对象的名称。 该名称可以包含正斜杠 (/);例如,work/addresses 是合法名称。 共享对象名称中不允许使用空格,也不允许使用以下字符:
~ % & \ ; : " ' , > ? ? # |
|
remotePath:String (default = null) — 将存储共享对象的服务器的 URI。 此 URI 必须与传递给 SharedObject.connect() 方法的 NetConnection 对象的 URI 相同。
|
|
persistence:Object (default = false) — 指定共享对象的数据属性的特性是本地永久储存还是远程永久储存,或者是同时进行本地永久储存和远程永久储存。 此参数还可指定共享对象的本地存储位置。 可接受的值包括:
注意:如果用户已选择了从不允许此域的本地存储,则即使将本地路径指定为永久性,对象也不会在本地保存。 有关详细信息,请参阅类的描述。 |
|
secure:Boolean (default = false) — 确定对此共享对象的访问是否只限于通过 HTTPS 连接传递的 SWF 文件。 有关详细信息,请参阅 getLocal 方法条目中对 secure 参数的描述。
|
SharedObject — 对可在多个客户端间共享的对象的引用。
|
Error — Flash Player 无法创建或找到共享对象。 如果为 remotePath 和 persistence 参数指定不存在的路径,则将出现这种情况。
|
另请参见
| send | () | 方法 |
public function send(... arguments):void
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
对连接到指定远程共享对象的所有客户端(包括发送该消息的客户端)广播一条消息。 若要处理和响应消息,则应创建处理函数以将其发送到共享对象。
参数
... arguments — 一个或多个参数:一个标识消息的字符串;附加到共享对象的一个或多个处理函数的名称;以及任意类型的可选参数。 它们经过序列化并通过该连接发送,而接收处理函数则以相同的顺序接收它们。 若某个参数为循环对象(例如:循环的链表),则序列化函数会正确地处理引用。
注意:函数名称切勿使用保留术语。 例如, |
| setDirty | () | 方法 |
public function setDirty(propertyName:String):void
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
通知服务器共享对象的属性(用 data 属性定义)值已更改。 此方法将属性标签为已更改 (dirty),并且在服务器端 ActionScript 中使用。
可使用 SharedObject.data 属性或完全通过创建新的、唯一名称的 SharedObject 属性来为共享对象创建属性。 有关两种方法间的差异的详细信息,请参阅 SharedObject.data 属性。
SharedObject.setProperty() 方法实现了 setDirty() 方法。 大多数情况下,例如当属性的值为 String 或 Number 等原始类型时,应使用 setProperty(),而不使用 setDirty()。 然而,当某个属性的值是一个包含其自身属性的对象时,则使用 setDirty() 来指示该对象中的值的更改时间。
参数
propertyName:String — 已更改的属性名称。
|
另请参见
| setProperty | () | 方法 |
public function setProperty(propertyName:String, value:Object = null):void
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
更新共享对象中某个属性(用 data 属性定义)的值,并通知服务器该属性的值已更改。 setProperty() 方法显式地将属性标签为已更改 (dirty),并在服务器端 ActionScript 中使用。 一些服务器(如 Flash Media Server)要求显式调用 setProperty(),以便指示共享对象属性的更改时间。
如果在服务器端调用 SharedObject.setProperty(),它将通过客户端上的 sync 事件为任何使用共享对象的 Flash Player 客户端调用更改通知。 服务器端的 propertyName 参数与客户端的 data 属性 (property) 的属性 (attribute) 相同。 例如,以下代码行都是等效的:前两行是服务器端 ActionScript,第三行和第四行是客户端 ActionScript:
setProperty("nameVal", "foo");
setDirty("nameVal");
data["nameVal"] = "foo";
data.nameVal = "foo";
Flash Media Server 用户可以从 Flash Media Server Server-Side ActionScript Language Reference中找到关于服务器端 ActionScript 和远程共享对象的其它信息。
注意:SharedObject.setProperty() 方法实现了 setDirty() 方法。 大多数情况下,例如当属性的值为 String 或 Number 等原始类型时,应使用 setProperty(),而不使用 setDirty。 然而,当某个属性的值是一个包含其自身属性的对象时,则使用 setDirty() 来指示该对象中的值的更改时间。 通常,最好调用 setProperty() 而不要调用 setDirty(),因为 setProperty() 只在值被更改的时候更新属性值,而 setDirty() 则强制所有订阅客户端进行同步。
参数
propertyName:String — 共享对象中属性的名称。
|
|
value:Object (default = null) — 属性值(一个 ActionScript 对象),如果为 null 则删除属性。
|
另请参见
| asyncError | 事件 |
flash.events.AsyncErrorEvent
flash.events.AsyncErrorEvent.ASYNC_ERROR
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
在异步引发异常(即来自本机异步代码)时调度。
AsyncErrorEvent.ASYNC_ERROR 常数定义 asyncError 事件对象的 type 属性值。
此事件具有以下属性:
| 属性 | 值 |
|---|---|
bubbles | false |
cancelable | false;没有要取消的默认行为。 |
currentTarget | 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target | 发生网络操作失败的对象。 |
error | 触发此事件的错误。 |
| netStatus | 事件 |
flash.events.NetStatusEvent
flash.events.NetStatusEvent.NET_STATUS
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
在 SharedObject 实例报告其状态或错误条件时调度。 netStatus 事件包含 info 属性,该属性为包含事件特定信息(例如,连接尝试是否成功或共享对象是否被成功写入本地磁盘)的信息对象。
netStatus 事件对象的 type 属性值。
此事件具有以下属性:
| 属性 | 值 |
|---|---|
bubbles | false |
cancelable | false;没有要取消的默认行为。 |
currentTarget | 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
info | 一个对象,具有描述对象的状态或错误情况的属性。 |
target | 报告其状态的 NetConnection 或 NetStream 对象。 |
另请参见
| sync | 事件 |
flash.events.SyncEvent
flash.events.SyncEvent.SYNC
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
在服务器更新了远程共享对象(SharedObject)后调度。
定义sync 事件对象的 type 属性值。
此事件具有以下属性:
| 属性 | 值 |
|---|---|
bubbles | false |
cancelable | false;没有要取消的默认行为。 |
currentTarget | 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
changeList | 一个数组,具有描述其状态的属性。 |
target | 已由服务器更新的 SharedObject 实例。 |
另请参见
"application-name" 创建(并在后续执行过程中检索)一个共享对象: 单击“保存”按钮时,saveValue() 方法尝试将一个名为 savedValue 的属性保存到 SharedObject 对象的 data 的属性。 如果 Flash Player 要求提供保存数据的权限,当用户授予或拒绝授予权限时,将调用 onFlushStatus() 方法。 单击“清除”按钮时,clearValue() 方法将删除 savedValue 中保存的值;下次加载 SWF 文件时,所检索的值为 undefined。
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.NetStatusEvent;
import flash.net.SharedObject;
import flash.net.SharedObjectFlushStatus;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFieldType;
public class SharedObjectExample extends Sprite {
private var mySo:SharedObject;
public function SharedObjectExample() {
buildUI();
saveBtn.addEventListener(MouseEvent.CLICK, saveValue);
clearBtn.addEventListener(MouseEvent.CLICK, clearValue);
mySo = SharedObject.getLocal("application-name");
output.appendText("SharedObject loaded...\n");
output.appendText("loaded value: " + mySo.data.savedValue + "\n\n");
}
private function saveValue(event:MouseEvent):void {
output.appendText("saving value...\n");
mySo.data.savedValue = input.text;
var flushStatus:String = null;
try {
flushStatus = mySo.flush(10000);
} catch (error:Error) {
output.appendText("Error...Could not write SharedObject to disk\n");
}
if (flushStatus != null) {
switch (flushStatus) {
case SharedObjectFlushStatus.PENDING:
output.appendText("Requesting permission to save object...\n");
mySo.addEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);
break;
case SharedObjectFlushStatus.FLUSHED:
output.appendText("Value flushed to disk.\n");
break;
}
}
output.appendText("\n");
}
private function clearValue(event:MouseEvent):void {
output.appendText("Cleared saved value...Reload SWF and the value should be \"undefined\".\n\n");
delete mySo.data.savedValue;
}
private function onFlushStatus(event:NetStatusEvent):void {
output.appendText("User closed permission dialog...\n");
switch (event.info.code) {
case "SharedObject.Flush.Success":
output.appendText("User granted permission -- value saved.\n");
break;
case "SharedObject.Flush.Failed":
output.appendText("User denied permission -- value not saved.\n");
break;
}
output.appendText("\n");
mySo.removeEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);
}
// UI elements
private var inputLbl:TextField;
private var input:TextField;
private var output:TextField;
private var saveBtn:Sprite;
private var clearBtn:Sprite;
private function buildUI():void {
// input label
inputLbl = new TextField();
addChild(inputLbl);
inputLbl.x = 10;
inputLbl.y = 10;
inputLbl.text = "Value to save:";
// input TextField
input = new TextField();
addChild(input);
input.x = 80;
input.y = 10;
input.width = 100;
input.height = 20;
input.border = true;
input.background = true;
input.type = TextFieldType.INPUT;
// output TextField
output = new TextField();
addChild(output);
output.x = 10;
output.y = 35;
output.width = 250;
output.height = 250;
output.multiline = true;
output.wordWrap = true;
output.border = true;
output.background = true;
// Save button
saveBtn = new Sprite();
addChild(saveBtn);
saveBtn.x = 190;
saveBtn.y = 10;
saveBtn.useHandCursor = true;
saveBtn.graphics.lineStyle(1);
saveBtn.graphics.beginFill(0xcccccc);
saveBtn.graphics.drawRoundRect(0, 0, 30, 20, 5, 5);
var saveLbl:TextField = new TextField();
saveBtn.addChild(saveLbl);
saveLbl.text = "Save";
saveLbl.selectable = false;
// Clear button
clearBtn = new Sprite();
addChild(clearBtn);
clearBtn.x = 230;
clearBtn.y = 10;
clearBtn.useHandCursor = true;
clearBtn.graphics.lineStyle(1);
clearBtn.graphics.beginFill(0xcccccc);
clearBtn.graphics.drawRoundRect(0, 0, 30, 20, 5, 5);
var clearLbl:TextField = new TextField();
clearBtn.addChild(clearLbl);
clearLbl.text = "Clear";
clearLbl.selectable = false;
}
}
}
当前页: http://livedocs.adobe.com/flash/9.0_cn/ActionScriptLangRefV3/flash/net/SharedObject.html