2008-06-30

Jaxer のエラーハンドリング runat="server" 編

サーバサイドでエラーが起きたとき、Aptana Jaxer がどのように振る舞うか調べてみましたので、その結果をお伝えします。Jaxer でサーバサイドのコードを実行するタイミングには runat="server" と runat="server-proxy" がありますが、今回は runat="server" を対象とします。

サーバサイドでエラーが発生するとは、つまり JavaScript の例外が発生すると同じです。そこで、次のとおり、サーバサイドで例外をスローするコードを用意しました。

<script type="text/javascript" src="jquery.js" runat="both"></script>
<script type="text/javascript" runat="server">
//<![CDATA[
jQuery(function($) {
throw 'ERROR!';
});
//]]>
</script>

そして、このサーバサイドのコードを実行すると、次のようなエラーページを表示し、そのエラーの原因がメッセージで示されます。このメッセージは、デバッグに役立ちます。このとき、ページのレンダリングは継続するので、その流れでクライアントサイドのコードも実行されることになります。



このサーバサイドのエラーメッセージを表示しないという選択もできます。そのときは、Config.UNCAUGHT_ERRORS_ARE_RESPONSE_ERRORS = false; とします。

次のような外部ファイルのインクルードに失敗したときも、エラーメッセージを表示しますが、Config.INCLUDE_ERRORS_ARE_RESPONSE_ERRORS = false; とすることで、インクルードのときのエラーメッセージのみ表示しないという選択もできます。

<jaxer:include src="jaxer-include/foo.html"></jaxer:include>
公開して運用するときには、上記のエラーメッセージを表示したり、継続して実行したりすると不都合があります。そのときは、Config.DISPLAY_ERRORS = false; とすることで、固定のエラーページを表示し、クライアントサイドのコードを実行しないようにできます。

固定のエラーページとして、Config.RESPONSE_ERROR_PAGE か Config.FATAL_ERROR_PAGE で指定したファイル(または文字列)の内容が表示されるはずなのですが、なぜか、次のような Jaxer のエラーページが表示されてしまいます。



Jaxer の不具合か環境か原因は把握できていません。ここで試した Jaxer のバージョンは 0.9.7.2472 Windows XP です。

0 件のコメント: