Flash AS3 - URLLoader无法加载来自不同域的二进制数据

时间:2012-03-05 14:50:14

标签: actionscript-3

两个要点。 1 - SWF必须能够从任何域加载二进制数据。 2 - SWF无法从url加载策略XML文件,因为上传表单只允许我上传swf文件,所以我不能包含任何其他数据。 我试过了:

Security.allowDomain("*");

但它仅适用于SWF文件。 我试图嵌入策略XML文件:

var dataXML:XML = 
<?xml version="1.0"?> 
<!-- http://www.foo.com/crossdomain.xml --> 
<cross-domain-policy> 
    <allow-access-from domain="*" /> 
</cross-domain-policy>;

但是Security.loadPolicyFile(url:String)只允许设置文件URL,而不是数据。 所以我的问题是,如何让SWF从不同的域加载二进制文件而不需要任何其他文件? URLLoader代码:

var request:URLRequest = new URLRequest("http://differentdomain.com/binaryfile.dat");
var words:URLLoader = new URLLoader(); 
words.dataFormat = URLLoaderDataFormat.BINARY; 
words.addEventListener(Event.COMPLETE, prepareFile);
words.addEventListener(IOErrorEvent.IO_ERROR, loadError);
words.addEventListener(SecurityErrorEvent.SECURITY_ERROR, secureError);
words.load(request);

如果文件来自与SWF文件不同的域,则会产生安全性错误。 谢谢你的帮助。

可以使用AS3代码中的ExternatInterface从JavaScript获取二进制数据。 这是用于读取二进制文件的跨浏览器库:binary reader和更高版本jDataView 希望这会对某人有所帮助。 感谢Jonatan Hedborg的想法。

4 个答案:

答案 0 :(得分:2)

您应该先阅读此内容:http://kb2.adobe.com/cps/142/tn_14213.html

你可以使用代理脚本,在google / stackoverflow上搜索你会找到很多答案......

答案 1 :(得分:1)

看看这个:http://wonderfl.net/c/gJXA

一些技巧适用于来自任何域的任何二进制数据,无需使用ajax或自己的代理脚本(有时你没有可能上传php脚本)。

答案 2 :(得分:0)

Flash是HTML页面最常用的控件。因此,它需要遵循同一页面上其他(即JavaScript)对象的安全限制。 网页使用same origin安全策略 - 页面上的对象无法从与当前页面的域不同的域中读取数据。

有些情况下,其他域的服务器允许此类访问。即在Flash案例中,它是crossdomain.xml,Silverlight存在类似的策略文件,有几种方法可以处理JavaScript,包括JSONP

错误地使用绕过同一原始政策的方法会导致您的网站/网页上出现cross-site scripting问题,这些问题通常会导致个人信息泄露。

答案 3 :(得分:0)

前一段时间我不得不解决类似问题,并设法利用UrlStream在运行时加载目标SWF的字节。

要点:https://gist.github.com/1988661