AIRでタブブラウザとか無理

Flexの学習がてら、タブブラウザを作ってみようとして断念したというお話。
HTMLコンポーネントを使えば楽勝かと思ったのだけれど、入力されたURLが無効だった場合に、例外なりエラーイベントなりを吐く機能がHTMLコンポーネントにない。
HTMLHostのupdateStatusメソッドを使えばチェックできるのだろうかと試してみたけど、できなかった。
ならばと、URLへのアクセスはURLLoaderで行い、取得したページデータをHTMLコンポーネントのhtmlTextにセットすることに。
これならエラーイベントはもちろん、progressイベントも取れて嬉しいし。
でもお次は、そうして表示したWebページの中のリンクがクリックされたときのページ遷移をコントロールできない。
こちらとしては、HTMLLoaderのデフォルトのページ遷移機能をOFFにして、URLLoaderを噛ませる自前の機能で処理したいわけだけど、デフォルトの機能をOFFにする方法が分からない。
まぁ、アクロバティックな方法として、HTMLLoaderにはtarget=”_blank”なリンクはページ遷移しない仕様があるので、ページ内のすべてのリンクをtarget=”_blank”に書き換えてやれば、デフォルトの機能をOFFにできる。
どうせタブブラウザするのだから、target=”_blank”の指定は書き換えて問題ないわけだし。
この方法で進めれば・・・と思ったのだけど、待てよと。
フレーム内でのページ遷移やら、フォーム送信でのページ遷移やら、JavaScriptでのページ遷移やら、いろいろ考慮しなきゃいけないことがあるなぁと思ったら、面倒くさくなっちゃった。
ちょうどSafari 4のニュースを目にもして、「AIRでタブブラウザ作ったところで、どうせ・・・」みたいな気持にもなってしまったことだし。
それにしても。
どうしてHTMLコンポーネント(あるいはHTMLLoader)がhttpStatusやioErrorイベントを吐くように設計しなかったんだろう。
えらい人の考えることは分からん。
せめてもの、ノウハウをひとつ。
HTMLコンポーネントで自前のHTMLLoaderを使いたいとき。
普通にHTMLコンポーネントのインスタンスを生成して、htmlLoaderやhtmlLoaderFactoryプロパティに値をセットしても上手くいかなかった。
そこで、まずHTMLコンポーネントのサブクラスを作って、そのコンストラクタのsuper()後で
htmlLoaderFactory = new ClassFactory(MyHTMLLoader);
としたら上手くいった。

Flex難しい

いま、FlashCS3で開発していたPrintMagicをFlex3に移植しているのだけど、思っていた以上に難儀してます。
Flex、むずかしぃぃぃぃ。
基本的な機能に沿って組んでいく分にはとても簡単でラクチンなんだけど、そこから外れたことをしようと思うと途端に難しくなるね。
なまじ用意された機能があるから、それを使って簡単に実装する方法があるに違いないと思って、調べて調べて、でもけっきょく分からずに自力で実装する、みたいなことが多くて。
なんでこれを簡単にコントロールする機能が用意されていないんだろうと思うことばかりです。
知識と経験を積んでいけば、たぶん「それを使って簡単に実装する方法」が分かるんだろうけど・・・。
先の果てしなさを思うと、ちょっとげんなりする。