学院首页>图形图像>FLASH>Flash 动作脚本之:了解Action Script2.0 (5)

Flash 动作脚本之:了解Action Script2.0 (5)

作者: 来源: 添加时间:2006-5-23 7:28:20
AS代码2.0:针对Flash Player 7(3)

 

四、SWF文件之间从HTTP到HTTPS协议的访问

  正如前一节所讨论的,在Flash 7播放器中,跨域和子域访问的规则已经修改。除了现在执行精确域匹配规则外,你必须显式说明允许存放在使用不安全协议的站点的文件访问存放在使用安全协议(HTTPS)的站点的文件。根据被调用的文件是针对Flash 7播放器还是针对Flash 6播放器发布的,你必须执行一个allowDomain语句,或使用新的LocalConnection.allowInsecureDomain事件处理函数或System.security.allowInsecureDomain()语句。

  警告:执行allowInsecureDomain()语句危及HTTPS协议提供的安全。只有在你不能重新组织你的站点以便所有的SWF文件都能接受HTTPS协议的服务时才做这样的修改。

  下面的代码说明你可能需要做的修改:

// 允许存放在http://www.someSite.com或http://www.someOtherSite.com的
// 针对Flash 7播放器发布的SWF文件访问的存放在https://www.someSite.com
// 针对Flash 6播放器发布的SWF文件中的命令
my_lc.allowDomain = function(sendingDomain) {
  return(sendingDomain=="someOtherSite.com");
}
// 允许针对Flash 7播放器发布的
// 存放在http://www.someSite.com或http://www.someOtherSite.com的
// 针对Flash 7播放器发布的SWF文件访问的对应命令
System.security.allowInsecureDomain("www.someSite.com",
"www.someOtherSite.com");
my_lc.allowInsecureDomain = function(sendingDomain) {
  return(sendingDomain=="www.someSite.com" ||
  sendingDomain=="www.someOtherSite.com");
}

  如果你当前还没有使用这些语句,你也可能需要添加这样的语句。

  即使两个文件都在相同的域也可能需要修改(例如,存放http://www.domain.com的文件调用存放在https://www.domain.com的文件)。

  总的来说,如果你针对Flash 7播放器发布文件且符合以下条件,你可能要修改你的文件,添加或修改语句:

  ①你编写跨SWF文件的脚本(使用loadMovie()、MovieClip.loadMovie()、MovieClipLoader.LoadClip()或本地连接对象)。

  ②调用文件没有存放在使用HTTPS协议的站点和被调用的SWF文件存放在使用安全协议(HTTPS)的站点。

  你必须做以下修改:

  ①如果被调用的SWF文件是针对Flash 7播放器发布的,在被调用的SWF文件中包含System.security.allowDomain或LocalConnection.allowDomain语句,使用精确域名匹配(如本节前面的代码实例所示)。即使调用的和被调用的SWF文件存放在相同的域,也需要这个语句。

  ②如果被调用的SWF文件是针对Flash 6或以前的播放器版本发布的,且调用的和被调用的文件都存放在相同的域(例如,存放http://www.domain.com的文件调用存放在https://www.domain.com的文件),不需要修改。

  ③如果被调用的SWF文件是针对Flash 6播放器版本发布的,调用的和被调用的文件不在相同的域,而你又不想针对Flash 7播放器导出被调用文件,就要修改被调用文件,添加或修改System.security.allowDomain或LocalConnection.allowDomain语句,使用精确域名匹配(如本节前面的代码实例所示)。

  ④如果被调用的SWF文件是针对Flash 6播放器版本发布的,而你又想针对Flash 7播放器发布被调用文件,就在被调用文件中包含System.security.allowDomain或LocalConnection.allowDomain语句,使用精确域名匹配(如本节前面的代码实例所示)。即使两个文件都存放在相同的域,也需要这个语句。

  ⑤如果被调用的SWF文件是针对Flash 5或以前的播放器版本发布的,且两个文件不在相同的域,你可以做两件事情。你可以针对Flash 6播放器发布被调用文件或修改System.security.allowDomain语句,使用精确域名匹配(如本节前面的代码所示);或者你可以针对Flash 7播放器发布被调用文件,使用精确域名匹配(如本节前面的代码实例所示)。

  五、允许访问数据的服务器端策略文件

  使用这些数据装载调用,Flash文档可以从外部源载入数据:XML.load()、XML.sendAndLoad()、LoadVars.load()、LoadVars.sendAndLoad()、loadVariables()、loadVariablesNum()、MovieClip.loadVariables()、XMLSocket.connect()和Macromedia Flash Remoting(NetServices.createGatewayConnection)。SWF文件也可以在运行期导入运行期共享库(RSL)或其它SWf文件中定义的资源。在默认情况下,被导入的数据或RSL必须存储在与装载这些外部数据或媒体的SWF文件相同的域。

  要使来自不同域的SWF文件能够使用数据和运行期共享库中的资源,你应该使用跨域策略文件。跨域策略文件是一个XML文件,它为服务器提供一种方法来指明它的数据和文档对来自某些域或所有域的SWF文件是可用的。任何一个来自服务器策略文件中指定的域的SWF文件都允许访问该服务器的数据或RSL。

  如果你在装载外部数据,即使你不打算针对Flash 7播放器发布任何文件,你也应该创建策略文件。如果你正在使用RSL,且针对Flash 7播放器发布调用的和被调用的文件,你应该创建策略文件。

站内搜索