Flex 跨域访问解决方案

来源:互联网 发布:淘宝卖家新手入门教程 编辑:程序博客网 时间:2024/06/05 13:27
想让swf 文件在一台服务器上运行并且能够访问另一台服务器上的资源,这时就会遇到跨域问题,请看下面的解决方案。 

写一个名字为 crossdomain.xml 的XML文件,这个方法是允许任何Flash都可以调用,放到被调用文件的网站根目录下: 
Java代码  收藏代码
  1. <?xml version="1.0"?>    
  2. <!DOCTYPE cross-domain-policy     
  3. SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">    
  4. <cross-domain-policy>    
  5. <allow-access-from domain="*" />    
  6. </cross-domain-policy>    

只让你允许的网站来调用你的数据. 
Java代码  收藏代码
  1. <?xml version="1.0"?>      
  2. <!DOCTYPE cross-domain-policy     
  3. SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">    
  4. <cross-domain-policy>    
  5. <allow-access-from domain="www.yoursite.com" />    
  6. <allow-access-from domain="yoursite.com" />    
  7. <allow-access-from domain="*.k-zone.cn" />    
  8. </cross-domain-policy>    

如果使用XMLSocket要把端口号加上 
Java代码  收藏代码
  1. <cross-domain-policy>    
  2. <allow-access-from domain="*.foo.com" to-ports="507,516" />    
  3. <allow-access-from domain="*.bar.com" to-ports="516-523" />    
  4. <allow-access-from domain="www.foo.com" to-ports="507,516-523" />    
  5. <allow-access-from domain="202.117.80.202" to-ports="*" />    
  6. </cross-domain-policy>   


如果安全策略文件放在根目录,文件名字必须为crossdomain.xml,如果不放在根目录, 
要用flash.system.security.loadPolicyFile("http://xcopy.net.cn/crossdomain.xml") 
这样的方法加载安全策略文件。 
转载地址:
http://localhost:8080/crossdomain.xml 

如果以上还不能成功访问,请再住下看: 
请注意代码中的:<param name="allowScriptAccess" value="always"/> 
Java代码  收藏代码
  1. <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width=512px height=384px    
  2.       codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">    
  3.       <param name="movie" value="http://www.xcopy.net.cn/test.swf" />    
  4.       <param name="quality" value="high" />    
  5.       <param name="allowScriptAccess" value="always"/>         
  6.       <embed src="http://www.xcopy.net.cn/test.swf" quality="high" bgcolor="#869ca7"    
  7.         width=512px height=384px name="/test" align="middle"    
  8.         type="application/x-shockwave-flash"    
  9.         allowScriptAccess="always"    
  10.         pluginspage="http://www.adobe.com/go/getflashplayer">    
  11.       </embed>    
  12. </object>    

如果用的是SWFObject的话,则: 
Java代码  收藏代码
  1. var so = new SWFObject(url+"/index.swf",   
  2.                 "index""100%""100%""10","#FF6600");  
  3.                   //添加这一句  
  4.         so.addParam("allowScriptAccess","always");  
  5.         so.write("flashcontent");  


注意:crossdomain.xml是放在服务器那边,而不是客户端这边.如访问的数据来源为:192.168.0.2  监听端口:8080  
访问端口:192.168.0.1  监听端口:8080   只用把crossdomain.xml放在192.168.0.2上就行,使得 
http://192.168.0.2/crossdomain.xml可以访问到 

上面这些操作肯定能解决远程调用SWF的跨域问题。 
如果SWF里面提供了一些接口,在外面想到调用的话,在swf初始化时添加:flash.system.Security.allowDomain("*"); 

即可被访问。

http://developer.51cto.com/art/201007/215246.htm

Flex跨域访问沙箱问题解决方案


本文和大家重点讨论一下Flex跨域访问的沙箱问题,当Flex访问WebService服务时,在本地能够正常访问,当部署到web容器中发布为web服务后,再调用WebServicIE,此时就会被拒绝访问,这就是Flex跨域访问的沙箱问题,下面介绍一下解决方案。

Flex跨域访问的沙箱问题

当Flex访问WebService服务时,在本地能够正常访问,当部署到web容器中发布为web服务后,再调用WebServicIE,此时就会被拒绝访问,这就是Flex跨域访问的沙箱问题,为了解决Flex跨域访问WebService的问题,可采用如下方案:

首先,Flex跨域访问被拒绝是因为提供服务方没有配置安全策略文件,即crossdomain.xml,如果你不想用crossdomain.xml就要用到代理,即自己写一个后台读取webservice,然后提供给自己的flex应用,因为在flashplayer中,要Flex跨域必须要有策略文件。考虑到flashplayer升级到9.124之后,加强了安全性,之前的crossdomain.xml的写法发生了变化,以下就是该文件的完整写法:

  1. <?xmlversionxmlversion="1.0"?> 
  2. <!DOCTYPEcross-domain-policySYSTEM"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
  3. <cross-domain-policy> 
  4. <allow-access-fromdomainallow-access-fromdomain="*"/> 
  5. <allow-http-request-headers-fromdomainallow-http-request-headers-fromdomain="*"headers="*"/> 
  6. </cross-domain-policy> 
  7.  

表示该服务允许任何外域来访问。

关于crossdomain.xml的放置目录问题,有如下解决方案,可放置在:

1)如果这个目录是容器的根目录,可以通过以下的url访问crossdomain.xml:

http://localhost:8080/crossdomain.xml。

2)如果crossdomain.xml不是放在根目录下,而是在某个webapp下面,在flex中就需要在初始化的时候应用

Security.loadPolicyFile("http://localhost:8080/xx/crossdomain.xml");

其中xx为webapp的名称

这样,外部Flex跨域访问该服务发布的WebService时,flashplayer首先找的就是crossdomain.xml文件,若安全机制设置为允许访问,则访问成功。


0 0
原创粉丝点击