グローバルエラーハンドラーでFlashのエラーダイアログを回避する方法

Adobe Flash Player 10.1 の新機能の一つとしてグローバルエラーハンドラーというものがあります。これは ActionScript でエラーが発生したときに、コーティング(捕捉)していないエラーを受け取ることのできる機能です。

主な利用用途として想定しないエラーのバグ収集を行う場合に役立ちます(参考:FACEs: FlashPlayer10.1でバグレポート)。今回の記事は、グローバルエラーハンドラーのもう一つの使い方として、Flash開発者に恥ずかしいエラーダイアログを表示させない方法の紹介です。

ランタイムエラーのダイアログ

さて、Flash 開発者であれば Flash Player のデバッガー版を利用していると思いますが、Flash サイトを見ているときに次のようなエラーダイアログが表示された経験のある方は多いのではないでしょうか。

一般的なエンドユーザー向けの Flash Player (リリース版)でエラーダイアログが表示されることはありません。ただ、Flash 開発者がこのエラーダイアログを見たときに、「作り込みの甘さ」を感じることが多いのではないのでしょうか。もちろん全てのエラーをコーティングするのはスキルの如何に関わらず膨大な検証時間が必要となり容易でないのが現実です。とはいえエラーダイアログからハッキングの情報を与えてしまうこともあるので、エラーダイアログは極力ださないことが望ましいです。

※SWF をデバッグビルドで出力した場合は、デバッグ情報が SWF に含まれるためセキュリティー的によろしくありません。公開版は必ずリリースビルドの SWF を使用しましょう。

グローバルエラーハンドラーで回避可能

このエラーダイアログは FP10.1 から実装されたグローバルエラーハンドラーを実装することで回避可能です。次のサンプルはグローバルエラーハンドラーを実装したもので、ラジオボタンの ON / OFF を切り替えることで挙動の違いを確認することができます。グローバルエラーハンドラーを有効にした場合には、エラーダイアログが表示されません。


[FP10.1] Global Error Handler – wonderfl build flash online

グローバルエラーハンドラーの実装方法ですが、Flash CS5 や Flex SDK 4.1 以上で、次のようにグローバルエラーハンドラーのスクリプトを記述します。

// グローバルエラーのイベント登録
loaderInfo.uncaughtErrorEvents.addEventListener(
  UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError);

// グローバルエラーハンドラー
function onUncaughtError(evt:UncaughtErrorEvent):void {
  trace(evt.error);
  evt.preventDefault(); // ココ重要!
}

イベントハンドラー内で UncaughtErrorEvent#preventDefault() メソッドをコールすることで、エラーダイアログが表示されなくなります。

サンプル&ソース

グローバルエラーハンドラーを実装する場合は次のサンプルのソースコードを参考くださいませ。

これでFlash開発者に恥ずかしいエラーダイアログを回避できますね!

関連記事

投稿者 : 池田 泰延

BookMark

ブックマークはこちらからどうぞ。

このエントリーをはてなブックマークに追加