两个要点。 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的想法。
答案 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的字节。