JavaScript課題対応で発見したTips3
focusoutイベントの処理でモーダルポップアップを表示する記述をしていた。
このとき、IE8では、ウィンドウの×ボタン押下によるフォーカスアウトでモーダルポップアップが表示されると、親画面が見た目上閉じられて、モーダルポップアップがフリーズ状態になる。
この状況を回避するために、以下のような判定方法案を考えて、フォーカスアウトイベントの中身の処理を実行しないように分岐しようと試みたが、いずれもうまくいかなかった。
結局、モーダルポップアップを諦めて、divタグで擬似ポップアップを作成するという対処にした。
- ウィンドウが閉じられるという事象を利用して判定
- onunloadイベント内でフラグを立てる⇒onunloadイベントが発生しない
- window.opener.closedで判定する⇒左記の値がtrueに変化していない
- クリックされた場所で判定
- e.toElementの値がnullか否かで判定する⇒×以外の部分(別フレーム等)でもnullである
- マウスクリックの座標で判定する⇒ブラウザのメニュー部分のカスタマイズ次第で×のy座標位置が変わってしまう