http://zhang-liming.blog.sohu.com/168163010.html
FlashPlayer网络API接口参数设置
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客户端在进行跨域访问操作的时候会自动去读取。