Flash CS3 文档 |
|||
| ActionScript 3.0 编程 > Flash Player 安全性 > 加载数据 | |||
SWF 文件可以将服务器的数据加载到 ActionScript 中,也可以将 ActionScript 中的数据发送到服务器。加载数据与加载媒体的操作方式不同,原因是加载的信息将直接显示在 ActionScript 中,而不是作为媒体显示。通常,SWF 文件可以从它们自己的域中加载数据。但是,要从其它域加载数据,它们通常需要跨域策略文件。
可以加载诸如 XML 文件或文本文件等数据。URLLoader 和 URLStream 类的 load() 方法受到跨域策略文件权限的控制。
如果使用 load() 方法从与调用该方法的 SWF 文件所在域不同的域中加载内容,则 Flash Player 会在被加载资源所在的服务器上检查是否存在跨域策略文件。如果存在跨域策略文件,并且该文件向执行加载的 SWF 文件所在的域授予访问权限,则可以加载数据。
默认情况下,禁用对套接字和 XML 套接字连接的跨域访问。此外,默认情况下还禁止访问与低于 1024 的端口上的 SWF 文件位于同一个域的套接字连接,但可以通过提供以下任一位置中的跨域策略文件来允许访问这些端口:
如果提供的跨域策略文件与主套接字连接位于同一端口,或者位于不同端口,则通过在跨域策略文件中使用 to-ports 属性来枚举允许的端口,如下例所示:
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy
SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <!-- Policy file for xmlsocket://socks.mysite.com --> <cross-domain-policy> <allow-access-from domain="*" to-ports="507" /> <allow-access-from domain="*.example.com" to-ports="507,516" /> <allow-access-from domain="*.example.org" to-ports="516-523" /> <allow-access-from domain="adobe.com" to-ports="507,516-523" /> <allow-access-from domain="192.0.34.166" to-ports="*" /> </cross-domain-policy>
要检索与主套接字连接位于相同端口中的套接字策略文件,只需调用 Socket.connect() 或 XMLSocket.connect() 方法;并且,如果指定的域与执行调用的 SWF 文件所在的域不同,Flash Player 将自动尝试从正在尝试的主连接所在的相同端口中检索策略文件。要从与主连接位于同一服务器上的不同端口检索套接字策略文件,需使用特殊的“xmlsocket”语法调用 Security.loadPolicyFile() 方法,如下所示:
Security.loadPolicyFile("xmlsocket://server.com:2525");
先调用 Security.loadPolicyFile() 方法,然后再调用 Socket.connect() 或 XMLSocket.connect() 方法。Flash Player 随后将一直等待完成策略文件请求,之后再决定是否允许主连接。
如果要实现套接字服务器,并且需要提供套接字策略文件,则应决定是使用接受主连接的同一端口提供策略文件,还是使用不同的端口来提供策略文件。无论是哪种情况,服务器均必须等待客户端的第一次传输之后再决定是发送策略文件还是建立主连接。当 Flash Player 请求策略文件时,它始终会在建立连接后传输以下字符串:
<policy-file-request/>
服务器收到此字符串后,即会传输该策略文件。程序对于策略文件请求和主连接并不会使用同一连接,因此应在传输策略文件后关闭连接。如果不关闭连接,Flash Player 将关闭策略文件连接,之后重新连接以建立主连接。
有关详细信息,请参阅套接字策略文件。
当 SWF 文件中的 ActionScript 代码向服务器或资源发送数据时,将会发生数据发送操作。对于网络域 SWF 文件,始终允许发送数据。本地 SWF 文件则只有在位于受信任的本地沙箱或只能与远程内容交互的沙箱中时,才能向网络地址发送数据。有关详细信息,请参阅本地沙箱。
可以使用 flash.net.sendToURL() 函数向 URL 发送数据。还可以使用其它方法向 URL 发送请求。这些方法包括 Loader.load() 和 Sound.load() 等加载方法以及 URLLoader.load() 和 URLStream.load() 等数据加载方法。
FileReference.upload() 方法可以将用户选择的文件上载到远程服务器。必须先调用 FileReference.browse() 或 FileReferenceList.browse() 方法,然后再调用 FileReference.upload() 方法。
调用 FileReference.download() 方法可打开一个对话框,用户可以在该对话框中从远程服务器下载文件。
|
注意 |
|
如果服务器要求用户身份验证,则只有在浏览器中运行的 SWF 文件(即使用浏览器插件或 ActiveX 控件的文件)才可以提供对话框来提示用户输入用户名和密码以进行身份验证,并且只适用于下载。Flash Player 不允许上载到需要用户身份验证的服务器。 |
如果执行调用的 SWF 文件位于只能与本地文件系统内容交互的沙箱中,则不允许执行上载和下载操作。
默认情况下,SWF 文件不会在自身所在服务器之外的服务器上执行上载或下载操作。如果其它服务器提供跨域策略文件向执行调用的 SWF 文件所在的域授予访问权限,则执行调用的 SWF 文件可以在其它服务器上执行上载或下载操作。
Flash CS3
当前页: http://livedocs.adobe.com/flash/9.0_cn/main/00000356.html