关于允许跨域数据加载

      flash杂项 2004-7-19 17:9
当在 Flash Player 7 中回放某个 Macromedia Flash 影片时,如果此影片调用了违反 Macromedia Flash Player Security Sandbox 的数据,会在 Flash 影片上出现一个“不安全操作”对话框,类似下图所示:


图片如下:

注:如果影片小于 215 x 138 像素,或者如果在版本较早的浏览器(例如 NN 4.x 或 IE.5.0 (Mac OS 9))中观看影片,此对话框不会出现。
-----------------------------------------------------------------------------------------------------
原因

Flash Player 7 具有增强的安全功能,可能会影响现有的内容。这些安全功能会影响数据加载操作,例如 loadVariables、LoadVars.load、XML.load、Flash 远程处理和 XML socket 的使用。

有三种机制可能会引发此行为。

1.影片尝试从另一个子域加载数据(即使此子域位于同一顶级域中)。例如,位于 www.macromedia.com 的影片从 foobar.macromedia.com 请求数据。

2.影片尝试从同一个域中加载数据,但影片或数据请求省略了 URL 的“www”标记。例如,位于 www.macromedia.com 的影片从 macromedia.com 请求数据。

3.影片通过 HTTP 承载,并且尝试加载位于指定了 HTTPS 协议的 URL 的数据。例如,位于 www.macromedia.com 的影片从 www.macromedia.com 请求数据。

解决方法

1.如果上述影片从省略了 URL 的“www”前导标记的 URL 请求数据(请参阅上述的示例 2),则可以修改影片,使对 URL 的所有请求均与访问影片时所用的 URL 相匹配。或者,可以将影片中的 URL 修改为相对 URL,而不是绝对 URL。

2.如果影片请求位于不同子域的数据源,可以将该数据源移到与影片相同的域中,影片中的 URL 会被更新为新的位置。

3.可以将跨域策略文件部署到想通过影片访问的服务器上。策略文件是 Flash Player 7 的一项新功能,它使站点管理员可以设置有关数据访问的规则。策略文件是简单的 XML 文件,用于允许 Flash 影片根据数据源的域进行数据访问。

也可以将它们用于允许从 HTTP 访问 HTTPS 数据,但不鼓励这样做。

注:这通常是最合适的解决方法,因为此方法无需以任何方式更改 Flash 影片,而且可以通过外部文本文件恢复功能。
----------------------------------------------------------------------------
其他信息
在 Flash Player 的“设置”用户界面中,或者在 macromedia.com 上的 Settings Manager 影片中,有一个选项可以使 Flash Player 用户控制所有 SWF 文件的数据加载。在这些情况下,最终用户已看到了数据加载对话框并选择了允许或拒绝操作,同时选中了复选框,以便在以后观看所有 Flash 影片时系统会记住此选择。

这样一来,最终用户将不再看到对话框,因此,可能会在没有通知的情况下发生数据加载错误,从而更难以诊断此问题。对于这种情况,部署策略文件可能是理想的解决方法。

------------------------------------------------------------------------------
详细说明如下

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 进行通讯的服务器上,策略文件才起作用。策略文件特定于所在服务器的端口和协议。

例如,某个策略文件位于 www.macromedia.com:8080/crossdomain.xml,它只适用于在端口 8080 通过 HTTPS 对 www.macromedia.com 进行的数据加载调用。

当您使用 XMLSocket 对象连接到另一个域中的套接字服务器时,此规则有例外情况。如果是这种情况,运行于与套接字服务器所在的同一个域中端口 80 上的 HTTP 服务器必须提供该方法调用的策略文件。

XML 策略文件包含单个 &ltcross-domain-policy> 标签,该标签又包含零个或多个 &ltallow-
access-from> 标签。每个 &ltallow-access-from> 标签包含一个属性 domain,该属性指定确切的 IP 地址、确切的域或通配符域(任何域)。通配符域由单个星号 (*)(匹配所有域和所有 IP 地址)或后接后缀的星号(只匹配那些以指定后缀结尾的域)表示。后缀必须以点开头。但是,带有后缀的通配符域可以匹配那些只包含后缀但不包含前导点的域。例如,foo.com 可以看作是 *.foo.com 的一部分。IP 域规范中不允许使用通配符。

如果您指定了一个 IP 地址,则将只向使用 IP 语法从该 IP 地址(例如 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"?>
<!-- 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>

不包含任何 &ltallow-access-from> 标签的策略文件等同于服务器上没有策略。




标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}
}