パッケージ | flash.events |
クラス | public class UncaughtErrorEvent |
継承 | UncaughtErrorEvent ErrorEvent TextEvent Event Object |
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
try..catch
ブロックの外側でエラーがスローされたり、登録されたリスナーのない ErrorEvent オブジェクトが送出される場合です。不明なエラーイベントを処理する機能は、"グローバルエラーハンドラー" とも呼ばれます。
イベントを送出する UncaughtErrorEvents オブジェクトは、LoaderInfo オブジェクトまたは Loader オブジェクトに関係付けられています。 次のプロパティを使用して、UncaughtErrorEvents インスタンスにアクセスします。
-
LoaderInfo.uncaughtErrorEvents
:同じ SWF 内で定義されたコードから不明なエラーを検出します。 -
Loader.uncaughtErrorEvents
:Loader オブジェクトがロードした SWF 内に定義されているコードから不明なエラーを検出します。
uncaughtError
イベントが発生した場合、イベントを処理しても、エラーが発生したコールスタックでは、実行は継続されません。 エラーが同期エラーの場合、エラーが発生した箇所の関数に残っているコードは実行されません。 したがって、不明なエラーイベントが発生した場合、アプリケーションは不安的な状態になる可能性があります。 不明なエラーには多くの原因が考えられるため、どの機能を使用できるかを予測するのは不可能です。たとえば、使用しているアプリケーションでネットワーク処理やファイル処理を実行できる場合でも、このような処理を実行できなくなる可能性もあります。
ある SWF が他の SWF をロードすると、 uncaughtError
イベントが LoaderInfo 階層内を下方にバブルしてから再度上方にバブルします。たとえば、Loader インスタンスを使用して A.swf が B.swf をロードしたとします。不明なエラーが B.swf で発生した場合、次の順番で uncaughtError
イベントが LoaderInfo オブジェクトと Loader オブジェクトに送出されます。
- (キャプチャ段階)A.swf の LoaderInfo
- (キャプチャ段階)A.swf 内の Loader
- (ターゲット段階)B.swf の LoaderInfo
- (バブル段階)A.swf 内の Loader
- (バブル段階)A.swf の LoaderInfo
Loader オブジェクトの uncaughtErrorEvents
プロパティは、ターゲット段階で uncaughtErrorEvent
を送出しません。キャプチャおよびバブリング段階以外では、イベントは送出されません。
他のイベントバブリングの場合と同様に、stopPropagation()
または stopImmediatePropagation()
を呼び出すと、他のリスナーへのイベントの送出が停止されますが、重要な違いが 1 点あります。Loader オブジェクトの UncaughtErrorEvents オブジェクトは、イベントのプロパゲーションを目的とした場合、ロードされた SWF の LoaderInfo.uncaughtErrorEvents
オブジェクトとのペアとして扱われます。これらのいずれかのオブジェトに登録されているリスナーが stopPropagation()
メソッドを呼び出すと、イベントのプロパゲーションが終了するまで、UncaughtErrorEvents オブジェクトに登録されている他のリスナーおよびそのペアである UncaughtErrorEvents オブジェクトに登録されているリスナーに、イベントが送出されます。stopImmediatePropagation()
メソッドを使用すると、すべての追加リスナーにイベントが送出されることはありません。
コンテンツがデバッグ版のランタイム(デバッグ版の の Flash Player や AIR Debug Launcher(ADL)など)で実行されている場合、不明なエラーが発生すると、それを示すエラーメッセージが表示されます。これらのランタイムバージョンでは、リスナーが uncaughtError
イベント用に登録されている場合でも、このエラーメッセージが表示されます。こうした状況でエラーメッセージが表示されないようにするには、UncaughtErrorEvent オブジェクトの preventDefault()
メソッドを呼び出します。
Loader オブジェクトによって読み込まれたコンテンツが AVM1(ActionScript 2)SWF ファイルである場合、AVM1 SWF ファイル内のキャッチされないエラーで uncaughtError
イベントが発生することはありません。さらに、HTMLLoader オブジェクトに読み込まれた HTML コンテンツ(Flex HTML コントロールを含む)の JavaScript エラーで uncaughtError
イベントが発生することはありません。
関連する API エレメント
プロパティ | 定義元 | ||
---|---|---|---|
bubbles : Boolean [読み取り専用]
イベントがバブリングイベントかどうかを示します。 | Event | ||
cancelable : Boolean [読み取り専用]
イベントに関連付けられた動作を回避できるかどうかを示します。 | Event | ||
constructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクター関数への参照です。 | Object | ||
currentTarget : Object [読み取り専用]
イベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。 | Event | ||
error : * [読み取り専用]
不明なエラーに関連付けられているエラーオブジェクトです。 | UncaughtErrorEvent | ||
errorID : int [読み取り専用]
特定のエラーに関連付けられた参照番号です。 | ErrorEvent | ||
eventPhase : uint [読み取り専用]
イベントフローの現在の段階です。 | Event | ||
target : Object [読み取り専用]
イベントターゲットです。 | Event | ||
text : String
textInput イベントの場合は、ユーザーが入力した文字または文字の連続です。 | TextEvent | ||
type : String [読み取り専用]
イベントのタイプです。 | Event |
メソッド | 定義元 | ||
---|---|---|---|
UncaughtErrorEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = true, error_in:* = null)
uncaughtError イベントの情報を含む UncaughtErrorEvent オブジェクトを作成します。 | UncaughtErrorEvent | ||
[オーバーライド]
UncaughtErrorEvent オブジェクトのコピーを作成して、各プロパティの値を元のプロパティの値と一致するように設定します。 | UncaughtErrorEvent | ||
カスタム ActionScript 3.0 Event クラスに toString() メソッドを実装するためのユーティリティ関数です。 | Event | ||
オブジェクトに指定されたプロパティが定義されているかどうかを示します。 | Object | ||
イベントで preventDefault() メソッドが呼び出されたかどうかを確認します。 | Event | ||
Object クラスのインスタンスが、パラメーターとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。 | Object | ||
イベントのデフォルト動作をキャンセルできる場合に、その動作をキャンセルします。 | Event | ||
指定されたプロパティが存在し、列挙できるかどうかを示します。 | Object | ||
ループ処理に対するダイナミックプロパティの可用性を設定します。 | Object | ||
イベントフローの現在のノードおよび後続するノードで、イベントリスナーが処理されないようにします。 | Event | ||
イベントフローの現在のノードに後続するノードで、イベントリスナーが処理されないようにします。 | Event | ||
ロケール固有の規則に従って書式設定された、このオブジェクトのストリング表現を返します。 | Object | ||
[オーバーライド]
UncaughtErrorEvent オブジェクトのすべてのプロパティを含むストリングを返します。 | UncaughtErrorEvent | ||
指定されたオブジェクトのプリミティブな値を返します。 | Object |
定数 | 定義元 | ||
---|---|---|---|
UNCAUGHT_ERROR : String = "uncaughtError" [静的]
uncaughtError イベントオブジェクトの type プロパティ値を定義します。 | UncaughtErrorEvent |
error | プロパティ |
error:*
[読み取り専用] 言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
不明なエラーに関連付けられているエラーオブジェクトです。通常、このオブジェクトのデータ型は、次のどちらかになります。
- Error インスタンス(またはそのサブクラスの 1 つ)。不明なエラーが
throw
ステートメントによって生成された同期エラーの場合です(try..catch
ブロックを使用してキャッチされたエラーなど)。 - ErrorEvent インスタンス(またはそのサブクラスの 1 つ)。不明なエラーが、エラー発生時にエラーイベントを送出する非同期エラーの場合です。
ただし、error
プロパティには、どのデータ型のオブジェクトも使用できます。 ActionScript では、Error オブジェクトのみに throw
ステートメントを使用する必要はありません。たとえば、次のコードはコンパイル時にも実行時にも有効です。
throw new Sprite()
この throw
ステートメントが try..catch
ブロックでキャッチされない場合は、throw
ステートメントが uncaughtError
イベントをトリガーします。この場合には、送出された UncaughtErrorEvent オブジェクトの error
プロパティは、throw
ステートメントに構成された Sprite オブジェクトとなります。
したがって、uncaughtError
リスナーについて、データ型が error
プロパティのものかどうかをチェックする必要があります。次の例は、このチェックの方法を示しています。
function uncaughtErrorHandler(event:UncaughtErrorEvent):void { var message:String; if (event.error is Error) { message = Error(event.error).message; } else if (event.error is ErrorEvent) { message = ErrorEvent(event.error).text; } else { message = event.error.toString(); } }
error
プロパティに、Error インスタンス(または Error サブクラス)が含まれている場合、コンテンツが実行されるランタイムのバージョンによって、表示されるエラー情報が次のように異なります。
Flash Player のデバッガーバージョンや AIR Debug Launcher(ADL)などのランタイムのデバッガーバージョン:
Error.getStackTrace()
メソッドはエラーにつながったコールスタックを返します。Error.message
には完全なエラーメッセージテキストが含まれます。
ランタイムの非デバッガーバージョン:
Error.getStackTrace()
メソッドはエラーにつながったコールスタックを返します。ただし、コールスタック情報にはソースファイル名や行番号は含まれません。Error.message
プロパティには、通常、Error.errorID
プロパティとError.name
プロパティを組み合わせた短い形式のエラーメッセージが含まれます。
ランタイムの非デバッガーバージョン(Flash Player 11.4 以前または AIR 1.4 以前):
Error.getStackTrace()
メソッドはnull
を返します。Error.message
プロパティには、通常、Error.errorID
プロパティとError.name
プロパティを組み合わせた短い形式のエラーメッセージが含まれます。
これ以外の Error クラスのすべてのプロパティとメソッドは、すべてのバージョンのランタイムで使用できます。
error
プロパティが ErrorEvent インスタンスの場合、コールスタック情報を取得することはできません。
実装
public function get error():*
UncaughtErrorEvent | () | コンストラクター |
public function UncaughtErrorEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = true, error_in:* = null)
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
uncaughtError
イベントの情報を含む UncaughtErrorEvent オブジェクトを作成します。
type:String (default = NaN ) — イベントのタイプです。
| |
bubbles:Boolean (default = true ) — Event オブジェクトがイベントフローのバブリング段階で処理されるかどうかを判断します。イベントリスナーは、継承された bubbles プロパティを通じてこの情報にアクセスできます。
| |
cancelable:Boolean (default = true ) — Event オブジェクトがキャンセル可能かどうかを判断します。イベントリスナーは、継承された cancelable プロパティを通じてこの情報にアクセスできます。
| |
error_in:* (default = null ) — キャッチまたは処理されなかったエラーに関連付けられているオブジェクトです(通常の状況での Error オブジェクトまたは ErrorEvent オブジェクト)。
|
clone | () | メソッド |
toString | () | メソッド |
UNCAUGHT_ERROR | 定数 |
public static const UNCAUGHT_ERROR:String = "uncaughtError"
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
uncaughtError
イベントオブジェクトの type
プロパティ値を定義します。
注意:try ブロックにイベントハンドラーを呼び出すイベントディスパッチャーがある場合、catch ブロックはイベントハンドラーで発生したエラーをキャッチしません。その後に発生したエラーは、LoaderInfo.uncaughtErrorEvents
をリッスンすることによってキャッチできます。
このイベントには、次のプロパティがあります。
プロパティ | 値 |
---|---|
bubbles | true |
cancelable | true にすると、デバッグ版の ランタイムでは、イベントをキャンセルしたときに不明なエラーのエラーメッセージが表示されなくなります。 |
currentTarget | イベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。 |
error | 不明なエラーです。 |
target | エラーが発生した SWF に関係付けられている LoaderInfo オブジェクトです。 |
text | テキストエラーメッセージ。 |
uncaughtError
イベントハンドラーを定義します。また、ボタンも作成され、それをクリックすると不明エラーハンドラーによって検出されたエラーがスローされます。
コンストラクターで、コードは LoaderInfo オブジェクトの uncaughtErrorEvents
プロパティが送出した uncaughtError
イベントのリスナーを登録します。
uncaughtErrorHandler()
メソッドで、コードは error
プロパティのデータ型をチェックし、その型に応じた応答を返します。
package { import flash.display.Sprite; import flash.events.ErrorEvent; import flash.events.MouseEvent; import flash.events.UncaughtErrorEvent; public class UncaughtErrorEventExample extends Sprite { public function UncaughtErrorEventExample() { loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); drawUI(); } private function uncaughtErrorHandler(event:UncaughtErrorEvent):void { if (event.error is Error) { var error:Error = event.error as Error; // do something with the error } else if (event.error is ErrorEvent) { var errorEvent:ErrorEvent = event.error as ErrorEvent; // do something with the error } else { // a non-Error, non-ErrorEvent type was thrown and uncaught } } private function drawUI():void { var btn:Sprite = new Sprite(); btn.graphics.clear(); btn.graphics.beginFill(0xFFCC00); btn.graphics.drawRect(0, 0, 100, 50); btn.graphics.endFill(); addChild(btn); btn.addEventListener(MouseEvent.CLICK, clickHandler); } private function clickHandler(event:MouseEvent):void { throw new Error("Gak!"); } } }
<?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" applicationComplete="applicationCompleteHandler();"> <fx:Script> <![CDATA[ import flash.events.ErrorEvent; import flash.events.MouseEvent; import flash.events.UncaughtErrorEvent; private function applicationCompleteHandler():void { loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); } private function uncaughtErrorHandler(event:UncaughtErrorEvent):void { if (event.error is Error) { var error:Error = event.error as Error; // do something with the error } else if (event.error is ErrorEvent) { var errorEvent:ErrorEvent = event.error as ErrorEvent; // do something with the error } else { // a non-Error, non-ErrorEvent type was thrown and uncaught } } private function clickHandler(event:MouseEvent):void { throw new Error("Gak!"); } ]]> </fx:Script> <s:Button label="Cause Error" click="clickHandler(event);"/> </s:WindowedApplication>
uncaughtError
イベントハンドラーを定義します。
コンストラクターで、コードは Loader オブジェクトを作成し、オブジェクトの uncaughtErrorEvents
プロパティが送出した uncaughtError
イベントのリスナーを登録します。
uncaughtErrorHandler()
メソッドで、コードは error
プロパティのデータ型をチェックし、その型に応じた応答を返します。
package { import flash.display.Loader; import flash.display.Sprite; import flash.events.ErrorEvent; import flash.events.UncaughtErrorEvent; import flash.net.URLRequest; public class LoaderUncaughtErrorEventExample extends Sprite { private var ldr:Loader; public function LoaderUncaughtErrorEventExample() { ldr = new Loader(); ldr.load(new URLRequest("child.swf")); ldr.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); } private function uncaughtErrorHandler(event:UncaughtErrorEvent):void { if (event.error is Error) { var error:Error = event.error as Error; // do something with the error } else if (event.error is ErrorEvent) { var errorEvent:ErrorEvent = event.error as ErrorEvent; // do something with the error } else { // a non-Error, non-ErrorEvent type was thrown and uncaught } } } }
Tue Jun 12 2018, 10:34 AM Z