こんな場合はこの記事を見てね!
そのものずばり!の内容じゃなくてもヒントになるはずです♪
ファイルをアップロードしようと思ったら「アクセスが拒否されました」
ウインドウをリサイズ、移動しようとしたら「アクセスが拒否されました」
form部品の初期値を取得したい、初期値に戻したい
form部品すべてにアクセスしたい
配列の値を削除したい
配列の値を並び替えたい
javascriptでtry-catch!
IEでclass名を取得したい
IEでonclick属性をセットしたい

2006年10月19日

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でした。



ちょっと使えるぞ♪と思ったらクリックして頂くと励みになります。ビジネスブログ100選
posted by junko at 10:37 | Comment(10) | TrackBack(0) | 例外処理
この記事へのコメント
Javascriptでtry-catchを使う

役に立ちました
ありがとうこざいます
Posted by at 2007年03月14日 14:02
参考にさせていただきました。ありがとうございます。
おそらく私が試した感じですと
「アクセスが拒否されました」のエクセプションコードは、
if(e.number == -2147024891){
が正しいみたいです。
#signed/unsignedの問題ではないですよね。タブン。
Posted by typista at 2007年04月10日 21:45
すごく参考になりました!ありがとうございました!
Posted by ごう at 2007年04月13日 23:28
>atさん typistaさん

コメントありがとうございます。
お返事遅くなりごめんなさい。
typistaさん、そうなんですね!
私もまたいろいろ調べてみたいと思います。
Posted by じゅんこ at 2007年04月18日 16:16
>ごうさん

ごうさんもコメントありがとうございます!
参考になったらうれしいです♪
Posted by じゅんこ at 2007年04月18日 16:17
コード参考にさせていただきました。
ありがとうございます。

補足ですが、エラーが発生した際に元通りブラウザから
エラーメッセージを表示させるには throw をする必要が
ありますね。

------------------------------------
try{

hogehoge;

//アクセスが拒否されましたのエラーが出たら何もしない
}catch(e){
if(e.number != -2147024891){
throw e;
}
}
------------------------------------
Posted by とおりすがり at 2007年12月07日 11:55
>とおりすがりさん

コメントありがとうございます!
そうですねー。throwしたほうがいいですよね。
コード修正しておきますね。
Posted by じゅんこ at 2007年12月19日 09:35
サイズ変更以外にも-2147024891がでます。
なぜでしょうか?
Posted by 質問 at 2008年11月21日 09:54
>質問さん

ファイルアップロードでアクセスできないパスを入力したなど「セキュリティ」に問題があるときにこのナンバーでエラーが発生します。
("-2147024891"で検索してみると良い例があります。)
今回はmove、resizeの時にはつぶしても問題はないという例を出しましたが、いつでも潰していいわけではありませんので注意してくださいね。
Posted by じゅんこ at 2008年11月28日 16:16
//アクセスが拒否されましたのエラーが出たら何もしない。
if(e.number == 2147024891){
  throw e;
}

とありますが、エラーが出た時だけthrowしてますね。
それ以外が握りつぶされておりますが。
他の方のコメントでソースをあげて教えてくださってる方がいるのに
修正されていないのが残念でした。
Posted by お名前 at 2014年12月08日 14:27
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック