【发布时间】:2012-03-05 14:50:14
【问题描述】:
两个重点。 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 的想法。
【问题讨论】:
-
要从 aaa.com 加载文件,您需要从 aaa.com/crossdomain.xml 加载 crossdomain.xml,否则可能无法正常工作。
-
这对我来说似乎是个笑话。任何其他语言都允许从任何地方下载二进制数据,但 AS3 不允许?
-
这是一个安全问题,它就是这样。解决它的唯一方法是设置一个代理服务器,您可以通过该代理服务器中继您的请求。另请注意,例如,silverlight 对跨域加载有更严格的限制,因此它不是唯一有这种怪癖的语言。
-
如果我不能上传除 SWF 文件以外的任何内容,并且如果我希望我的 SWF 独立于外部服务器上的任何其他 php 脚本,则没有解决方案?我不明白 - 如果 linux 服务器上的 wget,php,任何下载软件或本地加载的 swf 都可以做到,为什么在域下运行 swf 不能。我们可以加载已知的闪存媒体文件,仅此而已。我花了很多时间在 Flash 技术中制作第一个 MIDI 播放器,它可以从粘贴的 url 播放 MIDI 和卡拉 OK 文件,现在它完全没用 - 我希望它独立于脚本/服务器。
-
也许可以用 ExternalInterface 破解一些东西并通过 AJAX 加载文件,但大多数人只是设置了一个代理服务器来加载任意文件。您可能会为此获得一项服务,因此您不必设置自己的服务?我不确定您希望我们对此做什么 - 这是闪存的一项安全功能/限制,并且不太可能改变。
标签: actionscript-3