http://zhang-liming.blog.sohu.com/168163010.html

FlashPlayer网络API接口参数设置

分类:学习心得 | 标签: flash 
2011-03-04 23:10阅读(412)评论(0)

    

FlashPlayer网络API接口参数设置

当Flash在页面中被引用时,<object>和<embed>对象种“allowNetworking”属性也会对Flash数据接口产生影响。

         下面是“allowNetworking”属性可能有的值:

         1.“all” (默认)——所有的网络API接口都会被允许;

         2.“internal”——Flash会禁用所有与浏览器页面相关的所有操作,但是其它的API接口仍然可用;

         3.“none”——所有Flash相关的外部接口都将被禁用;

下面是一个页面引用Flash文件的例子:

 

 

Code

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,18,0" width="600" height="400" id="test" align="middle">

<param name="allowNetworking" value="none" />

<param name="movie" value="test.swf" />

<param name="bgcolor" value="#333333" />

<embed src="test.swf" allowNetworking="none" bgcolor="#333333" width="600" height="400"

name="test" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" />

</object>

 

 

 

 

allowNetworking

被禁用的APIs

Internal

getURL

MovieClip.getURL

Fscommand()

ExternalInterface.call()

None

包含上面的API

XML.load

XML.send

XML.sendAndLoad

LoadVars.load()

LoadVars.send

LoadVars.sendAndLoad

loadVariables

loadVariablesNum

MovieClip.loadVariables

NetConnection.connect

NetStream.play

loadMovie

loadMovieNum

MovieClip.loadMovie

MovieClipLoader.loadClip

Sound.loadSound

LocalConnection.connet

LocalConnection.send

ShareObject.getLocal

ShareObject.getRemote

FileReference.download

FileReference.upload

System.security.loadPolicyFile

XMLSocket.connet

 

 

 

服务器端安全策略文件

首先我们先看一下Flash可以通过哪些方法实现对外部数据的访问:XML.load(), XML.sendAndLoad(), LoadVars.load(), LoadVars.sendAndLoad(), loadVariables(), loadVariablesNum(), MovieClip.loadVariables(), XMLSocket.connect(), 以及 Remoting (NetServices.createGatewayConnection)。为了确保这些方法能够在不同域之间正常工作,我们在服务器端需要配置一个安全策略文件crossdomain.xml。这个策略文件是一个XML格式的文件,通过它服务器可以让自己的数据能够被指定域的Flash文件访问到。

跨域数据的下载许可

当Flash文件试图进行跨域数据访问的时候,Flash会自动地默认从数据服务器下载跨域策略文件,如果Flash所访问的数据服务期所在域在这个策略文件之中的话,那这个跨域文件访问的操作就会被允许。

这个跨域的策略文件必须命名为 crossdomain.xml,而且必须在Flash所访问的服务器上。策略文件所在的服务器的网络端口协议不同,它所支持的网络连接方式也不一样。例如: https://www.baidu.com:8080/crossdomain.xml,这个策略文件就只能支持HTTPS协议下8080端口的数据连接。有一个例外的情况,XMLSocket对象链接Socket服务器时,如果Socket服务器和Flash不在同一个域,这时候配置文件只能通过HTTP协议的80端口来进行链接。

crossdomain.xml的格式如下:

 

 

Code

<?xml version="1.0"?>

<cross-domain-policy>

<allow-access-from domain="www.baidu.com" />

<allow-access-from domain="*.baidu.com" />

<allow-access-from domain="105.216.0.40" />

</cross-domain-policy>

 

 

其中< allow-access-from >标签的数量可为一个或多个,domain的属性可以是一个完整的域名,也可以使用通配符来代替,当然也可以使用IP地址。

当我们使用IP地址时,在Flash程序中数据的调用也一定要使用IP地址来连接,因为Flash本身没有DNS解析的功能,所以如果在程序中链接的域名是无法解析到具体的IP地址。

如果我们需要Flash在任何域名都能够与服务器进行连接,那我们就可以用一个单个通配符来代替:

 

 

Code

<?xml version="1.0"?>

<cross-domain-policy>

<allow-access-from domain="*" />

</cross-domain-policy>

 

 

另外,每一个<allow-access-from>还有一个“secure”的属性,这个属性默认是true,当我们在HTTPS服务器下面部署策略文件,而Flash文件又是在HTTP服务器下,这时候就需要将这里的“secure”属性设置为false。反之,如果Flash文件是在HTTPS服务器下,而策略文件是在HTTP服务器下,这里的“secure”属性也要被设置为false;

 

 

Code

<?xml version="1.0"?>

<cross-domain-policy>

<allow-access-from domain="www.baidu.com" secure=”false”/>

</cross-domain-policy>

 

 

自定义放置策略文件

在Flash Player 7.0以及以上的版本支持一个方法:System.security.loadPolicyFile。这个方法可以让Flash程序从一个自定义指定的位置读取crossdomain.xml的策略文件。因为如果我们默认把策略文件放置在网站服务器的根目录,可能会给服务器管理员造成一些麻烦,所以通过System.security.loadPolicyFile这个方法可以调用指定位置策略文件,服务器管理员可以根据需要将策略文件放置在某一个位置,Flash客户端在进行跨域访问操作的时候会自动去读取。

 
分享到:
   阅读(412)评论(0)