代码之家  ›  专栏  ›  技术社区  ›  Eran Kampf

如何使用Flash(AS3)从远程域调用Flex SWF?

  •  2
  • Eran Kampf  · 技术社区  · 17 年前

    我有一个Flex swf托管在 http://www.a.com/a.swf 我在另一个doamin上有一个flash代码,它尝试加载SWF:

    _loader = new Loader();
    var req:URLRequest = new URLRequest("http://services.nuconomy.com/n.swf");
    _loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderFinish);
    _loader.load(req);
    

    在onLoaderFinish事件中,我尝试从远程SWF加载类并创建它们:

    _loader.contentLoaderInfo.applicationDomain.getDefinition("someClassName") as Class
    

    当这段代码运行时,我得到以下异常

    SecurityError: Error #2119: Security sandbox violation: caller http://localhost.service:1234/flashTest/Main.swf cannot access LoaderInfo.applicationDomain owned by http://www.b.com/b.swf.
        at flash.display::LoaderInfo/get applicationDomain()
        at NuconomyLoader/onLoaderFinish()
    

    有没有办法让这个代码正常工作?

    3 回复  |  直到 13 年前
        1
  •  6
  •   Theo    17 年前

    这些都在本文中描述 The Adobe Flex 3 Programming ActionScript 3 PDF 第550页(第27章:Flash Player安全/交叉脚本):

    例如,如果使用ActionScript 3.0编写的两个SWF文件来自不同的域, http://siteA.com/swfA.swf http://siteB.com/swfB.swf 然后,默认情况下,Flash Player不允许swfA.swf编写swfB.swf脚本,也不允许swfB.swf编写swfA.swf脚本。SWF文件通过调用Security.allowDomain()为来自其他域的SWF文件授予权限。通过调用Security.allowDomain(“siteA.com”),swfB.swf授予siteA.com的swf文件编写脚本的权限。

        2
  •  2
  •   grapefrukt    17 年前

    在加载文件的服务器上,您需要一个crossdomain.xml策略文件,它的外观应该如下所示:

    <?xml version="1.0"?>
    <!-- http://www.foo.com/crossdomain.xml -->
    <cross-domain-policy>
      <allow-access-from domain="www.friendOfFoo.com" />
      <allow-access-from domain="*.foo.com" />
      <allow-access-from domain="105.216.0.40" />
    </cross-domain-policy>
    

    将其作为crossdomain.xml放在加载域的根目录中。

    您还需要将加载程序设置为读取此文件:

    var loaderContext:LoaderContext = new LoaderContext();
    loaderContext.checkPolicyFile = true;
    
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onComplete );
    loader.load( new URLRequest( "http://my.domain.com/image.png" ), loaderContext );
    

    代码示例yoinked自 http://blog.log2e.com/2008/08/15/when-a-cross-domain-policy-file-is-not-enough/

        3
  •  0
  •   Rytmis    17 年前
    推荐文章