Flex URLStream安全沙箱违规

时间:2013-05-31 12:03:48

标签: actionscript-3 flash flex flex4

我想从MJPG获取URLStream,但我在发布版本中收到错误#2048:安全沙箱违规错误。

我正在尝试做什么:

Security.allowDomain("*");
Security.allowInsecureDomain("*");

var stream:URLStream = new URLStream();
//receiving this error event in onStreamSecurityError handler:
//Error #2048: Security sandbox violation: {swf} cannot load data from {url}
stream.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onStreamSecurityError);
//load method have no loader context option
stream.load(new URLRequest("http://anydomain.com/mjpg/video.mjpg"));

设置crossdomain.xml不是解决方案,因为应用程序应该能够从任何远程服务器加载流。

我记得flash.display.Loader类我设置了LoaderContext和应用程序域。之后,flex应用程序可以从任何域加载资源。但我不知道如何处理URLStream。

您是否有错误#2048的任何解决方案或解决方法?

1 个答案:

答案 0 :(得分:5)

这是不可能的。您无法远程授予对其他域的访问权限,因为这不是您的授权。 allowDomain()函数不会这样做,它反过来会这样做:

  

允许标识的域中的SWF文件访问包含allowDomain()调用的SWF文件中的对象和变量。

如果您的SWF位于域a.com上,并且您在其中添加了行Security.allowDomain("b.com"),则授予对您的SWF上域b.com上的SWF的访问权限。它不授予您访问域b.com的权限。

您可以在the documentation of allowDomain()

中找到有关此内容的详细信息

AJAX不会让你这样做,或者更好的说,浏览器不会让你。他们都遵循相同的规则。

为了克服这个问题,您必须通过与SWF位于同一域的服务器端脚本代理请求。它可以在PHP中使用curl,或者任何你觉得更容易的东西。 This video解释了如何以及为什么。