SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【JavaScript】エラーをalertで出すこと

よく見かけるalertでのエラー表示、

//...
if ("エラーがあったら") {
	alert("エラーです!");
	return false;
}
//...

最近のブラウザは、alertが連続すると下の画像のような表示に変わります。

このページによる追加のダイアログの表示を抑止する このページではこれ以上ダイアログボックスを生成しない

ダイアログ表示の間隔が短いと「これ以上表示しない」の表示が出るようです。

firefoxの場合では、プログラムソース内のSUCCESSIVE_DIALOG_TIME_LIMITや、ユーザーが設定できる値のdom.successive_dialog_time_limitが動作に影響します。about:configで、追加、変更でき、1か0を指定すると「これ以上表示しない」の表示をしなくなります。


動作確認用ボタン

(無限ループ覚悟でクリックしてください)

(時間間隔が短めだと、メッセージが表示される)

(alertが表示されたらすぐ閉じれば、間隔が十分に空いて、何もいわれない)

(ごく普通のconfirm)


「このページによる追加のダイアログの表示を抑止する」にチェックを入れるとダイアログが出なくなります。

以前は、無限ループなどが発生するとタスクマネージャーからブラウザを落とすしかなかったものです。


これ、問題なさそうに見えて、confirmやその後のスクリプトの実行に影響が出ます。

「このページではこれ以上ダイアログボックスを生成しない」にチェックをつけてしまうと、以降alertは例外を発生し、処理が止まります。confirmのダイアログも出ません。

uncaught exception: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIDOMWindow.confirm]" (略
Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIDOMWindow.alert] http://example.com/ Line 1

比較的短い間隔でエラーを表示させることはあまりないとは思いますが、エラー等の表示にはalertは使わず、HTML中の要素にメッセージを挿入したり、jqueryuiのdialogのようなものを使う方がいいのかなと思います。

関連するメモ

コメント(5)

ミッチョン 2013年9月1日 16:22

こんにちは。質問があるのですが、こういうアラートはブログを入力している最中にも出るものなのでしょうか?
これまで長文のブログを書いても出たことがなかったし、チェック入れて閉じたのちもブログに何も書けなくなりました。
その上、おかしいなと思いつつブラウザを閉じて再起動したら自分の管理画面に入れない状態になりました。
よく確認したところ、インターネット接続が出来なくなっており、電源を切る等の方法でも接続は出来ませんでした。
仕方なく「システムの復元」でPC上は数日前に戻すことで何とかなりましたが、とても理不尽な感じがします。
機械全般詳しくないので、いきなりインターネット接続が切られていると何かの攻撃かとさえ思います。
知りたいのは、「なぜこういうものが出るのか?」と、「インターネット接続遮断しなければならないほどのことって、どういうものなのか?」ということです。
以前、別のPCでとあるサイトを閲覧しただけで同じことが起こり、その時はルーターの電源を切って再度入れるだけで復活しましたが、以前の件も今回も腑に落ちない気持ちなのです。特におかしなことをした覚えないので・・・。(閲覧と、ブログの更新作業中だっただけですから)
教えて頂けると有難いです。

yoshimura 2013年9月1日 16:35

システムによりますが、アラートが出るような作りになっていることはあるかも知れません。
そのとき、「□このページでこれ以上ダイアログボックスを生成しない」にチェックを入れると、その後のJavaScriptの動作に影響しそうです(エラーで動かなくなるなど)。
それで書き込みができなくなったのかなと思います。
その後ルーターがおかしくなっていたのは、また別の問題だと思います。

推測ですが、
・お使いのブログシステムがアラートを出すような作りになっていた
・アラートを出ないように設定したことで、その後の処理に支障が発生した
・ちょうどそのときルーターもおかしくなった(異常な量の通信があったなど関連はあるかもしれませんが)
といったことだろうかと思います。

ミッチョン 2013年9月1日 18:47

お答えいただき有難うございます。
アラートが出てしまうと作業できなくなるし、チェック入れて消しても作業できなくなったし
アラートが出た時点でアウトな状況だったなと思います。
その後、同じ内容のブログがアップ出来ましたので、何かその他の要因がたまたまぶつかったのかも知れませんね。
でも、なんだかヒヤヒヤです(;^_^A

どうも有難うございました。

(T . T) 2017年1月8日 02:50

この機能のおかげでWEBアプリのエラー表示に使えなくなりましたよね・・・気軽で確実なモーダルなので便利だったのに。

とおりすがり 2017年11月13日 08:51

なんかChromeはこのチェックボックスが出なくなるバグが遅くとも2017年1月あたりから出てるようなので先祖返りして「無限ループ覚悟」がホントに覚悟が必要なボタンになってますね。
全員が症状を起こすわけでもないのでしょうけど。
なおこの状態でタブを無理矢理閉じるとタブの処理してたプロセスが見えないところで無限ループして、同一プロセスで開いてるタブが巻き添えで死ぬ模様。