日々のアンテナ

ARTICLE PAGE

Javascriptでtry-catchを使う

Javascriptでtry-catch構文が使えるって知らない人が多かったので書いてみました。 (最近じゃAjaxでほぼ必須だから認知度高いかもしれないけど。)
try{エラーをキャッチしたい処理内容}catch(e){エラーをキャッチしたら行う処理内容}
プログラミング言語に慣れている方はすんなり受け入れられると思いますが、どんなプログラムでもこの例外処理が大変重要です。 Javascriptではそんなに厳しく例外処理をする必要ないかもしれないけど、使ったら便利ってことがよくあります。 それは、ブラウザが返却するエラーをキャッチすることです。 IEではよくあるのですが、windowのリサイズや移動、またはファイルのアップロード時など、セキュリティ上の都合で、ブラウザからエラーが返されてしまいます。 そうするとその後の一切の処理ができなくなり大変都合が悪いです。 なので、このブラウザから返されるエラーをキャッチし、つぶすなり、他の処理に置き換えるなりする必要があります。 例:windowのリサイズや移動を行う。 リサイズ時にユーザーがウインドウを触ったりすると 「アクセスが拒否されました」のアラートが上がることがあります。 エラーの詳細はMicrosoftサポート情報 これは特に重要なエラーではないので、潰したいという場合。 try{   window.top.resizeTo(w,h);   window.top.moveTo(x,y); }catch(e){   //アクセスが拒否されましたのエラーが出たら何もしない。   if(e.number == 2147024891){     throw e;   } } 再度リサイズや移動を行うにはそれなりの処理が必要です。 アクセスが拒否されましたのエラーナンバーは上記の通りなので、 これ以外のエラーだった場合はエラーが返されますので安心です。 (全てを潰すのはセキュリティ上よくない。) このほか、ファイルのアップロードしたいときに、 相対パスや存在しないようなファイル名を入力してsubmitすると、無反応だったり「アクセスが拒否されました」となりその後の処理が不可能になることがあります。 詳細はMicrosoftサポート情報 エラー自体はセキュリティ上しょうがないとしても、リカバリできないのは困ります。 なのでこれもエラーをキャッチし、自分でエラーを返すことで処理の続行が可能となります。 try{   document.myform.submit(); } catch (e) {   alert('存在しないファイルが指定されました。'); } 他にもデバッグ代わりにつかったり、知っておくと便利なtry-catchでした。

Comments 6

-  

Javascriptでtry-catchを使う
役に立ちました
ありがとうこざいます

2007/03/14 (Wed) 14:02 | EDIT | REPLY |   

typista  

参考にさせていただきました。ありがとうございます。
おそらく私が試した感じですと
「アクセスが拒否されました」のエクセプションコードは、
if(e.number == -2147024891){
が正しいみたいです。
#signed/unsignedの問題ではないですよね。タブン。

2007/04/10 (Tue) 21:45 | EDIT | REPLY |   

ごう  

すごく参考になりました!ありがとうございました!

2007/04/13 (Fri) 23:28 | EDIT | REPLY |   

じゅんこ  

>atさん typistaさん
コメントありがとうございます。
お返事遅くなりごめんなさい。
typistaさん、そうなんですね!
私もまたいろいろ調べてみたいと思います。

2007/04/18 (Wed) 16:16 | EDIT | REPLY |   

じゅんこ  

>ごうさん
ごうさんもコメントありがとうございます!
参考になったらうれしいです♪

2007/04/18 (Wed) 16:17 | EDIT | REPLY |   

とおりすがり  

コード参考にさせていただきました。
ありがとうございます。
補足ですが、エラーが発生した際に元通りブラウザから
エラーメッセージを表示させるには throw をする必要が
ありますね。

2007/12/07 (Fri) 11:55 | EDIT | REPLY |   

Leave a reply