【问题标题】:AS3: Sandbox violation when trying to load an off-site swfAS3:尝试加载场外 swf 时违反沙箱
【发布时间】:2010-11-17 13:08:02
【问题描述】:

我正在尝试将放置在 Amazon S3 (b.com) 上的 swf 加载到不同域 (a.com) 上的 swf 中,它会引发此错误

SecurityError: Error #2121: Security sandbox violation: Loader.content:http://www.a.com/loader.swf cannot accesshttp://b.com/loadee.swf. This may be worked around by calling Security.allowDomain.
at flash.display::Loader/get content()

a.com 和 b.com 在它们的根目录上都有一个 crossdomain.xml,看起来像

<cross-domain-policy>
  <site-control permitted-cross-domain-policies="all"/>
  <allow-access-from domain="*"/>
  <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

我尝试加载的 swf (b.com/loadee.swf) 是由软件生成的,因此我无法向其添加 Security.allowDomain("*") 或类似内容。

我可以通过某种方式加载这个 swf,还是我坚持使用 a.com 来托管所有内容?我还希望 loader.swf 和 loadee.swf 能够通信(传递变量并进行函数调用) 如果可能的话。这就是我在 loader.swf 中的内容

Security.allowDomain("*");
Security.allowInsecureDomain("*");
Security.loadPolicyFile("http://b.com/crossdomain.xml");
var loaderContext:LoaderContext = new LoaderContext();
loaderContext.checkPolicyFile = true;
loaderContext.allowCodeImport = true;
var loader:Loader = new Loader();
loader.load(new URLRequest("http://b.com/loadee.swf"), loaderContext);

如果有人有任何想法,我将不胜感激。

【问题讨论】:

    标签: flash actionscript-3 security sandbox


    【解决方案1】:

    如果 loadee.swf 不是受版权保护的材料,您可以使用 flasm 向其中添加字节码,或者如果您是专家,您可以使用任何 HEX 编辑器来完成。

    P.S:别忘了,跨域策略在 843 端口。

    【讨论】:

    • 我刚刚用自制的 loadee.swf 进行了测试,它抛出了同样的错误,直到我添加了 Security.allowDomain("*")。您可能认为 Adob​​e 会允许加载使用 3rd 方应用程序制作的外部 swf:O
    • 是的,当然。 SWF 是一个开放标准,您可以加载/修改由第三方应用程序(例如 FlashDevelop)制作的 SWF。它需要高超的技能,但这是可能的。
    猜你喜欢
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多