群馬県のシステム開発・ソフトウェア開発なら株式会社ジー・エス・ディー(GSD)にお任せください。
また、システム開発・ソフトウェア開発向け人材派遣も行っております。
<< April 2019 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 >>
<< php講習会 | main | 群馬県の母乳育児相談室「石田助産所」 >>
ブラウザの閉じる時のイベントについて
0
    Javaで作成したシステムにおいて、
    セッションエラーが発生する事態が発生し、
    原因を調査しました。

    通常のケースでは、セッション切断時間を設定し、
    その設定時間を越えた場合、セッションが切れる為、
    セッションエラーが発生します。

    web.xmlファイルに以下を記述します。

    【例】単位は分です。この場合は2時間までセッション保持します。
    <session-config>
      <session-timeout>120</session-timeout>
    </session-config>

    しかし、2時間を越えなくてもセッションエラーが発生しました。

    原因を調査した結果、次のことが判明しました。

    _萍未鯤弔犬觧、セッション無効化処理をしている。
     正しく、閉じる時に、セッション無効化にしていれば、
     問題ありませんが、どうやら、正しく行われていないようです。

    JavaScriptにて、window.onunloadが使用されている。
     このイベントは、ページが切り替わった時に発生します。
     画面を閉じる時のイベントがあれば、良いのですが、どうやら
     無さそうです。ちょっと不便ですね。
     onunloadイベントは、画面を閉じる時以外にもJavaによる処理が
     実行され、再び画面を表示する時にもこのイベントが発生する為、
     onunloadイベントだけでは、閉じる時かどうか判断できません。

    スクリーン座標
     そこで、閉じる時の判断として、スクリーン座標で判断していました。
     if(window.screenLeft < 10003 && window.screenLeft > 0){
      //通常処理
      } else {
        //閉じる時・・・セッション無効化処理実行
      }

     どこから、このような判断ができるのか不明です。
     IEで調べても、IEの閉じる時の仕様は記載されていなそうでした。

    ぜ存
     実際に、alert(window.screenLeft);を記載して調査してみました。
     ※Internet Explorer 6.0で調査
     パターン1:ブラウザの閉じるボタン押下した時⇒スクリーン左座標は10004でした。
     パターン2:Alt+ F4キーを押下した時⇒スクリーン左座標は10004でした。
     パターン3:Ctrl + Wキーを押下した時⇒スクリーン左座標は10004でした。
     パターン4:ブラウザを最小化にして、タスクバーを右クリックし閉じるボタンを押下
            ⇒スクリーン左座標は-32000でした。
     パターン5:画面を最大化した時⇒スクリーン左座標は0でした。
     パターン6:画面から見えなくなるほど左にブラウザを持っていった時
            ⇒スクリーン左座標はマイナス値でした。
     パターン7:通常処理ボタンを押下した時
            ⇒このシステムでは画面を開いたとき、最大化されず、
             スクリーン左座標は4でした。

     この結果から、パターン5とパターン6の場合、確かにセッションエラーになりました。
     閉じたときのスクリーン左座標がこんなに不思議な値を返すことは知りませんでした。
     確かにこれならば、閉じる判定は可能ですが、他のIEのバージョンや他のブラウザで、
     このような値を取得するのか疑問です。

     IE6.0の場合はスクリーン座標をとりあえず、-10000より大きく、10003未満にすれば
     正しく動作すると思います。
    COMMENT