(最近じゃ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でした。
役に立ちました
ありがとうこざいます
おそらく私が試した感じですと
「アクセスが拒否されました」のエクセプションコードは、
if(e.number == -2147024891){
が正しいみたいです。
#signed/unsignedの問題ではないですよね。タブン。
コメントありがとうございます。
お返事遅くなりごめんなさい。
typistaさん、そうなんですね!
私もまたいろいろ調べてみたいと思います。
ごうさんもコメントありがとうございます!
参考になったらうれしいです♪
ありがとうございます。
補足ですが、エラーが発生した際に元通りブラウザから
エラーメッセージを表示させるには throw をする必要が
ありますね。
------------------------------------
try{
hogehoge;
//アクセスが拒否されましたのエラーが出たら何もしない
}catch(e){
if(e.number != -2147024891){
throw e;
}
}
------------------------------------
コメントありがとうございます!
そうですねー。throwしたほうがいいですよね。
コード修正しておきますね。
なぜでしょうか?
ファイルアップロードでアクセスできないパスを入力したなど「セキュリティ」に問題があるときにこのナンバーでエラーが発生します。
("-2147024891"で検索してみると良い例があります。)
今回はmove、resizeの時にはつぶしても問題はないという例を出しましたが、いつでも潰していいわけではありませんので注意してくださいね。
if(e.number == 2147024891){
throw e;
}
とありますが、エラーが出た時だけthrowしてますね。
それ以外が握りつぶされておりますが。
他の方のコメントでソースをあげて教えてくださってる方がいるのに
修正されていないのが残念でした。