我想从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的任何解决方案或解决方法?
答案 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解释了如何以及为什么。