FlashでつくったswfからFlex SDK 3.2.0で作ったswfをロードすると…ちゃんとうごかないね…

Flexで作ったswfからFlashで作ったswfをロードするのは、仕事でがんがんやってます。しかし、わりと無理やり感が伴うものでした。一見ちゃんとできそうに見えて、やってみるとワークアラウンドの嵐になるという…。

今回のFlashからFlexロードも一見簡単そうですが、やってみると予想通りやっぱり微妙でした。とりあずFlash側で次のコードを書けば、Flexで作ったswfが普通に動きそうに見えます。

  var loader:Loader = new Loader();
  loader.load(new URLRequest("madeByFlex.swf"));
  stage.addChild(loader);

実際これで問題なく動いちゃうケースは多いんですが、動かないケースがいろいろ。たとえば、Flex側のswf内でCursorManager.setCursor()を実行すると、関数内でstageが取得できずに落ちます(ユーザー視点で見ると、マウスカーソルがいきなり消えたように見えます)。PopUpManagerに至ってはポップアップを開こうとすると落ちます。基本的にSystemManager経由でstageをいじるようなことをやると動作がヘンになるか、動きません。

どうやらFlashからFlexのswfをロードすると、isTopLevelRoot()がtrueなSystemManagerが不在となってしまうようです。FlexフレームワークはisTopLevelRoot()がtrueなSystemManagerが少なくとも一つ存在することを前提に組まれているように見えます。

んで、FlashからのFlex読み込みは、Flash/Flexの仕様としてサポート外なのかなぁ〜と思ってたらFlex SDK 3.3.0で、PopUpManagerが落ちる問題は修正されていました→http://bugs.adobe.com/jira/browse/SDK-18706

Fixされたということは、Adobeさん的にはFlashからFlexを読み込むというのは想定範囲内のようですね。CursorManagerも直っているのかどうかについては後日試してみようと思います。