Flash 文档可以使用以下数据加载调用之一从外部源加载数据:XML.load()
、XML.sendAndLoad()
、LoadVars.load()
、LoadVars.sendAndLoad()
、loadVariables()
、loadVariablesNum()
。另外,SWF 文件可以在运行时导入运行时共享库或另一个 SWF 文件中定义的资源。默认情况下,数据或 SWF 媒体(运行时共享库的情况)必须与加载该外部数据或媒体的 SWF 驻留在同一个域中。
若要使运行时共享库中的数据和资源可用于其它域中的 SWF 文件,请使用跨域策略文件。跨域策略文件是一个 XML 文件,该文件提供的方法可以使服务器指示其数据和文档可用于从某些域或所有域提供的 SWF 文件。服务器的策略文件指定的域所提供的所有 SWF 文件都将被允许访问该服务器中的数据或资源。
当 Flash 文档试图访问另一个域中的数据时,Flash Player 自动尝试从该域加载策略文件。如果尝试访问数据的 Flash 文档所在的域包括在该策略文件中,则数据将自动成为可访问数据。
策略文件必须具有名称 crossdomain.xml 并驻留在提供数据的服务器的根目录中。只有在通过 HTTP、HTTPS 或 FTP 进行通讯的服务器上,策略文件才起作用。策略文件特定于所在服务器的端口和协议。
例如,某个策略文件位于 https://www.macromedia.com:8080/crossdomain.xml,它只适用于在端口 8080 通过 HTTPS 对 www.macromedia.com 进行的数据加载调用。
当您使用 XMLSocket 对象连接到另一个域中的套接字服务器时,此规则有例外情况。如果是这种情况,运行于与套接字服务器所在的同一个域中端口 80 上的 HTTP 服务器必须提供该方法调用的策略文件。
XML 策略文件包含单个 <cross-domain-policy>
标签,该标签又包含零个或多个 <allow-
标签。每个
access-from><allow-access-from>
标签包含一个属性 domain
,该属性指定确切的 IP 地址、确切的域或通配符域(任何域)。通配符域由单个星号 (*
)(匹配所有域和所有 IP 地址)或后接后缀的星号(只匹配那些以指定后缀结尾的域)表示。后缀必须以点开头。但是,带有后缀的通配符域可以匹配那些只包含后缀但不包含前导点的域。例如,foo.com 可以看作是 *.foo.com 的一部分。IP 域规范中不允许使用通配符。
如果您指定了一个 IP 地址,则将只向使用 IP 语法从该 IP 地址(例如 http://65.57.83.12/flashmovie.swf)加载的 SWF 文件授予访问权限,而不向使用域名语法加载的那些 SWF 文件授予访问权限。Flash Player 不执行 DNS 解析。
以下是一个策略文件的示例,该策略文件允许从 foo.com 上的 Flash 文档访问来自 foo.com、
friendOfFoo.com、*.foo.com 和 105.216.0.40 的 Flash 文档:
<?xml version="1.0"?> <!-- http://www.foo.com/crossdomain.xml --> <cross-domain-policy> <allow-access-from domain="www.friendOfFoo.com" /> <allow-access-from domain="*.foo.com" /> <allow-access-from domain="105.216.0.40" /> </cross-domain-policy>
不包含任何 <allow-access-from>
标签的策略文件等同于服务器上没有策略。