1

我有一些应该从外部服务器访问的 SWF 文件。为了能够做到这一点,我需要在每个 SWF 文件中都有 Security.allowDomain。这里的问题是我没有这些文件的 FLA 并且有数千个 SWF。

如果有更好的方法将这些文件配置为可从其他域访问?就像拥有某种配置文件一样。

4

1 回答 1

2

是的,有一种解决方法,但我认为这是一个安全漏洞,因此它可以在任何版本的 Flash Player 中修复。同时它现在可以工作,所以这里是解决方案 - 使用URLLoaderwithBINARY dataFormat作为 swf 字节的预加载器:

swf 没有脚本的安全权限:

package
{
import flash.display.MovieClip;


public class astest extends MovieClip
{
    public function astest()
    {
    }

    public function externalCheck():void
    {
        graphics.beginFill(0xFF0000);
        graphics.drawCircle(100, 100, 100);
    }
}
}

想要加载以前的 swf 并调用externalCheck方法的加载器 swf:

package
{
import flash.display.Loader;
import flash.display.MovieClip;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.utils.ByteArray;

public class astest2 extends MovieClip
{
    private var loader:Loader;
    private var urlLoader:URLLoader;

    public function astest2()
    {
        init();
    }

    //this method works fine
    protected function init():void
    {
        urlLoader = new URLLoader();
        urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
        urlLoader.load(new URLRequest("http://domain_with_your_swfs/astest.swf"));

        urlLoader.addEventListener(Event.COMPLETE, function(event:Event):void
        {
            addChild(loader = new Loader());

            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoader);
            loader.loadBytes(urlLoader.data as ByteArray);
        });
    }

    //this method will fire SecurityError when calling the 'externalCheck' method
    protected function init2(event:Event = null):void
    {
        addChild(loader = new Loader());

        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoader);
        loader.load(new URLRequest("http://domain_with_your_swfs/astest.swf"));
    }

    protected function onLoader(event:Event = null):void
    {
        var swf:Object = loader.content;
        swf.externalCheck();
    }


}
}

不要忘记将crossdomain.xml文件放在要加载 swf 文件的服务器的根目录下,没有它 URLLoader 将无法加载字节,这是唯一的安全要求。

于 2013-02-08T08:21:28.163 回答