MozillaZine.jp フォーラム
https://forums.mozillazine.jp/

alert() で操作ができない
https://forums.mozillazine.jp/viewtopic.php?f=2&t=6232
ページ 11

作成者:  山茶花 [ 2007年8月17日(金) 17:41 ]
記事の件名:  alert() で操作ができない

下のようなページで、
コード:
<html>
<body onfocus="JavaScript:alert('cant quit')">
</body>
</html>

ダイアログがでて[OK]やダイアログのウィンドウのクローズ[x]を
おすとダイアログが増えていき、他の操作もできないんですけど
回避方法はないですか?
環境は、Firefox 2.0.0.5 Linux版、FreeBSD 6.2-STABLE、KDE 3.5(ウインドウ修飾 Plastik)です。

作成者:  Hide [ 2007年8月18日(土) 04:45 ]
記事の件名:  Re: alert() で操作ができない

山茶花 さんが書きました:
下のようなページで、
コード:
<html>
<body onfocus="JavaScript:alert('cant quit')">
</body>
</html>

ダイアログがでて[OK]やダイアログのウィンドウのクローズ[x]を
おすとダイアログが増えていき、他の操作もできないんですけど
回避方法はないですか?

#JavaScript の知識があまりないのでオフトピということで :)
<script></script>の間がどうなっているのか分かりませんが、onfocus="JavaScript:alert('cant quit')" の記述に間違いがあるのでは?

これは山茶花さんが制作したhtml、または公開されているhtmlでしょうか?

作成者:  山茶花 [ 2007年8月18日(土) 11:02 ]
記事の件名:  Re: alert() で操作ができない

元のページはどっかので私のではありません。それをすこし変えたものです。
<script></script>はありません。このまま保存してfirefoxで開くと再現できます。
alertのダイアログの[x]をクリックすると一瞬フォーカスが元のウインドウに
切り替わるのでその間Ctrl+Uを連打して、ページのソースを得ました。
firefoxを終了することもメニューバーもツールバーも操作出来ないです。

# ユーザ名(ハンドル)、件名とも空白でしたので追記補足しました。
  投稿時は必ずお名前と件名を入れてください。 (by 管理人 Premier)

作成者:  Cai [ 2007年8月18日(土) 12:04 ]
記事の件名:  Re: alert() で操作ができない

コード:
<html>
<body onfocus="JavaScript:alert('cant quit')">
</body>
</html>

仕様、かなぁと思います。

1. ファイルを読み込む
2. body にフォーカスがあたる。
3. body の onfocus イベントハンドラが発動、 alert を表示(focus は alert に)。
4. alert を閉じる。
5. フォーカスが body に戻る。
6. 3. に戻る
……
こうなるとプロセスを殺さない限り連鎖から抜けられなくなります。

IE7 ではデフォルトでスクリプトの実行が抑制されているため一発目を止められるのと、alert を閉じた後 body にフォーカスが戻らないのかこのような連鎖を防止しているのかはわかりませんが二発目以降は不発でした。

#ウィキペディアにもサンプルがありました 8)

作成者:  mar [ 2007年8月19日(日) 18:22 ]
記事の件名:  Re: alert() で操作ができない

一応、Bugzilla にはクリティカルバグとして登録されてます。

Bug 302787 – alert() in onFocus causes infinite loop of alerts (onfocus triggered after each alert)

Bug 112296 – window.onfocus JS event goes in a loop

作成者:  山茶花 [ 2007年8月19日(日) 21:23 ]
記事の件名:  Re: alert() で操作ができない

回避方法見つかりました!
alert()のダイアログの[OK]か[x]を連打し同時にALT+Homeを連打するというものです。
後はダイアログを新しい順に閉じるだけです。
他には
Alt+← 戻る
Ctrl+W タブを閉じる
でも回避できます。
もう一つウインドウが開いてあればそれで終了できました。

ページ 11 All times are UTC + 9 hours
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/