1

外部サーバーからアクセスする必要がある SWF ファイルが多数あります。これを行うには、各 SWF ファイルに Security.allowDomain を含める必要があります。ここでの問題は、これらのファイル用の FLA がなく、何千もの SWF があることです。

これらのファイルを他のドメインからアクセスできるように構成するより良い方法がある場合は? ある種の設定ファイルなどを持っているようなものです。

4

1 に答える 1

2

はい、回避策が 1 つありますが、これはセキュリティ ホールであると考えられるため、Flash Player のどのリリースでも修正できます。その間、現在は機能しているので、ここに解決策があります-swfバイトのプリローダーとして使用URLLoaderします:BINARY dataFormat

it スクリプトのセキュリティ権限のない 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 をロードしてメソッドを呼び出したいローダー swf externalCheck:

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 に答える