ActionScript 3.0 API
出站脚本和 URL 访问(使用 HTTP URL、mailto: 等)可通过使用以下 ActionScript 3.0 API 来实现:
- flash.system.fscommand() 函数
- ExternalInterface.call() 方法
- flash.net.navigateToURL() 函数
对于本地运行的 SWF 文件,对 API 的调用仅在 SWF 文件和包含网页位于本地信任的安全沙盒中时才会成功。如果内容在本地网络沙盒或本地文件系统沙盒中,对这些方法的调用将失败。
用于加载 SWF 文件的 HTML 代码中的 AllowScriptAccess 参数可控制从 SWF 文件内执行出站 URL 访问的能力。可在 PARAM 或 EMBED 标记内设置此参数。如果没有为 AllowScriptAccess 设置值,仅当 SWF 文件和 HTML 页面都来自同一域时,它们才能进行通信。
AllowScriptAccess 参数可以具有以下三个值之一:“always”、“sameDomain”或“never”。
- 如果 AllowScriptAccess 为“always”,SWF 文件可与它嵌入到的 HTML 页面进行通信。即使 SWF 文件和 HTML 页面来自不同的域,此规则依然适用。
- 如果 AllowScriptAccess 为“sameDomain”,仅当 SWF 文件和它嵌入到的 HTML 页面来自同一域时,它们才能进行通信。此值是 AllowScriptAccess 的默认值。要阻止在一个域中托管的 SWF 文件访问另一个域的 HTML 页面中的脚本,请使用此设置。或者,不要设置 AllowScriptAccess 的值。
- 如果 AllowScriptAccess 为“never”,SWF 文件将无法与任何 HTML 页面进行通信。该值已被弃用,而且也不推荐使用;如果您不从自己的域为不受信任的 SWF 文件提供服务,也没有必要使用该值。如果需要为不受信任的 SWF 文件提供服务,Adobe 建议您创建一个不同的子域,并将所有不受信任的内容都放在此处。
使用 navigateToURL() 函数
除了上面讨论的由 allowScriptAccess 参数指定的安全设置以外,navigateToURL() 函数还具有另一个可选参数。您可以使用此参数(亦或目标)指定要将 URL 请求发送到的 HTML 窗口或框架的名称。其他安全限制也适用于此类请求。具体的限制根据 navigateToURL() 是用作脚本还是非脚本语句而异。
对于脚本语句(例如 navigateToURL("JavaScript: alert('Hello from Flash Player.')")),以下规则将适用。
- 如果 SWF 文件是一个本地受信任文件,则请求将成功。
- 如果目标是 SWF 文件嵌入到的 HTML 页面,则上述 allowScriptAccess 规则将适用。
- 如果目标包含从 SWF 文件所在的同一域加载的内容,则请求将成功。
- 如果目标包含从 SWF 文件所在的域以外的其他域加载的内容,并且前两个条件都不满足,则请求将失败。
对于非脚本语句(HTTP、HTTPS、mailto: 等),如果满足所有以下条件,则请求将失败:
- 目标是特殊关键字“_top”或“_parent”之一,并且
- SWF 文件位于从其他域托管的网页中,并且
- SWF 文件通过“always”以外的 allowScriptAccess 值嵌入。
关键字:AllowScriptAccess, Flash Player, Flash, Flex, fscommand, ExternalInterface, navigateToURL, 沙盒; tn_16494