SharedObject 类用于在用户计算机或服务器上读取和存储有限的数据量。使用共享对象,可在永久贮存在本地计算机或远程服务器上的多个客户端 SWF 文件和对象之间实现实时数据共享。本地共享对象类似于浏览器 Cookie,远程共享对象类似于实时数据传输设备。若要使用远程共享对象,您需要 Adobe Flash Media Server。
可使用共享对象执行以下操作:
- 保持本地永久性。这是使用共享对象的最简单方法,并且无需使用 Flash Media Server。例如,可以调用
SharedObject.getLocal()
在 Flash Player 应用程序中创建共享对象,如带记忆功能的计算器。用户关闭计算器时,Flash Player 将在用户计算机的共享对象中保存最后一个值。计算器下一次运行时,将包含先前所拥有的值。或者,在计算器应用程序关闭之前,如果将共享对象的属性设置为null
,下次运行该应用程序时,它在打开时不包含任何值。维护本地永久性的另一示例就是跟踪用户首选项或复杂网站的其它数据,如用户在新闻网站上所阅读文章的记录。跟踪此信息将允许您以不同方式分别显示已经阅读的文章和新的未读文章。在用户计算机上存储此信息可减小服务器负载。 - 在 Flash Media Server 上存储并共享数据。共享对象可以在服务器上存储数据以供其它客户端进行检索。例如,调用
SharedObject.getRemote()
以创建一个在服务器上永久保留的远程共享对象,如电话簿。每次客户端对共享对象进行更改时,修改后的数据可供当前或以后连接到该对象的所有客户端使用。如果还在本地永久保留了该对象,并且客户端在未连接到服务器时更改了数据,下次客户端连接到远程共享对象时,则会将数据复制到该对象。 - 实时共享数据。共享对象可以实现多个客户端的实时数据共享。例如,您可以打开一个存储连接到聊天室的用户列表的远程共享对象,连接到该对象的所有客户端都能看到此列表。当用户进入或离开聊天室时,将更新该对象,连接到该对象的所有客户端都能看到修改的聊天室用户列表。
若要创建本地共享对象,请调用 SharedObject.getLocal()
。若要创建远程共享对象,请调用SharedObject.getRemote()
。
当应用程序关闭时,将会刷新共享对象或将其写入磁盘。也可以调用 flush()
方法以显式地将数据写入磁盘。
本地磁盘空间注意事项。本地共享对象具有一些限制,这些限制很重要,您在设计应用程序时要予以考虑。有时可能不允许 SWF 文件写入本地共享对象,有时可能会在您不知情的情况下删除在本地共享对象中存储的数据。Flash Player 用户可以管理对单个域或所有域可用的磁盘空间。当用户减少可用磁盘空间时,一些本地共享对象可能会被删除。Flash Player 用户还具有隐私控制能力,它们可防止第三方域(当前浏览器地址栏中域之外的域)读取或写入本地共享对象。
注意:在本地计算机(而不是远程服务器)上存储和运行的 SWF 文件始终可以将第三方共享对象写入磁盘。有关第三方共享对象的详细信息,请参阅“Flash Player 帮助”中的“全局存储设置”面板。
最好检查与磁盘空间数量和用户隐私控制有关的故障。在调用 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
事件。
远程共享对象。如果使用 Flash Media Server,您可以创建并使用远程共享对象,这些对象是由连接到应用程序的所有客户端实时共享的。在一个客户端更改远程共享对象的属性时,也会为所有连接的客户端更改此属性。您可以使用远程共享对象同步客户端,例如,在玩多人游戏的用户。
每个远程共享对象具有一个 data
属性,此对象包含存储数据的属性。可以调用 setProperty()
以更改数据对象的属性。服务器将更新这些属性,调度sync
事件,并将这些属性发回到连接的客户端。
您可以选择将远程共享对象永久保留在客户端和/或服务器上。默认情况下,Flash Player 最多在本地永久保存 100K 的远程共享对象。在尝试保存较大的对象时,Flash Player 将显示一个“本地存储”对话框,用户可以在其中允许或拒绝共享对象的本地存储。请确保舞台大小至少为 215 x 138 像素;这是 Flash 显示该对话框所需的最小大小。
如果用户选择“允许”,服务器将保存共享对象并调度 code
属性值为 netStatus
的 SharedObject.Flush.Success
事件。如果用户选择“拒绝”,服务器不会保存共享对象并调度code
属性值为SharedObject.Flush.Failed
的netStatus
事件。