外部SWFを表示する

GW前から、すっかりサボってしまいました。1週間ぶりの更新。


GWはETC割引に乗っかって、車で出かけてましたが、
大渋滞にはまったりで大変な目に(たぶん、誰でも予想できた事なんでしょうが)。
まぁ、これは別のお話なので、別のエントリーにするかも(しないかも)。


さて、今回はAIRで作ったアプリから、別のSWFを表示する例を。
これは、Java側で生成したSWFを、AIR側で表示するために必要な処理。


前のエントリーでAIRBootについてちょっとだけ触れたけど、必要な処理のヒント(というか全て)はそこのページに書いてある。


手順は、

  1. NativeWindowを作る
  2. Loaderを作って、1.で作ったNativeWindowに追加する
  3. ターゲットのSWFを、2.で作ったLoaderでロードする

これだけだったりする。
必要最小限のコードはこんな感じかと。

public function openSwfUrl(url:String):void {
    var initOptions:NativeWindowInitOptions
            = new NativeWindowInitOptions();                 // …a
    // initOptions.maximizable = true;
    // initOptions.minimizable = true;
    // initOptions.resizable = true;
    // initOptions.systemChrome = NativeWindowSystemChrome.STANDARD;
    // initOptions.type = NativeWindowType.NORMAL;
    // initOptions.transparent = false;

    var window:NativeWindow = new NativeWindow(initOptions); // …b
    window.visible = true;
    // window.x;
    // window.y;
    // window.width;
    // window.height;
    // window.maxSize;
    // window.minSize;

    var loaderContext:LoaderContext = new LoaderContext();
    loaderContext.allowLoadBytesCodeExecution = true;        // …c
    window.stage.scaleMode = StageScaleMode.NO_SCALE;
    window.stage.align = StageAlign.TOP_LEFT;

    var loader:Loader = new Loader();
    window.stage.addChild(loader);                           // …d

    var urlrequest:URLRequest = new URLRequest();
    urlrequest.url = url;
    loader.load(urlrequest, loaderContext);                  // …e
}


引数は開きたい外部SWFのURL。
NativeWindowのコンストラクタには、NativeWindowInitOptionsが必要なので、
それをあらかじめ作っておき(a)、好みに応じてパラメータをいじる。
次にNativeWindowを作り(b)、NativeWindow.visibleプロパティはtrueに設定。
その他のプロパティは好みに応じて。


LoaderContextを作り、allowLoadBytesCodeExecutionプロパティをtrueに設定(c)。
その下、2行も含めて、この辺はおまじない。


LoaderをNativeWindowに追加して(d)、URLRequestを引数にLoader.loadメソッドを実行すると(e)、
NativeWindowが表示され、指定した外部SWFが中に表示される。

以上の処理で、外部のあるSWFを動的にロードして表示することができるようになる。


一応、こういう処理パーツは出来上がっているんだけど、
アプリとしての仕上がりがまったく進まないんだよなぁ…。



参考URL