- PR -

クライアントからサーバー側の関数の呼び出し

投稿者投稿内容
すー
会議室デビュー日: 2006/07/13
投稿数: 11
投稿日時: 2006-08-01 20:56
いつもお世話になっております。

現在Javascriptのwindow.onbeforeunload()
でブラウザの×ボタンを押されたときのイベントは取得できるのですが、
そのときにサーバー側の関数を走らせたいのですが、良い考えが思いつきません。
ご教授よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-08-01 22:03
厳密には、「ブラウザの×ボタンを押されたときのイベント」なんてありません。

「クライアントが、正規の手順を踏まずにブラウザを終了させたとき」を考えるなら、

  • LAN ケーブルが抜けて、長時間経過したとき
  • 無線 LAN 環境で、電波が検知できなくなって(略)
  • ユーザが電源ボタンを押したとき
  • ユーザ側で停電があったとき

等のことも考えて、再設計しましょう。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-08-01 22:22
AJAX風に非同期通信すれば、サーバーの処理を実行できると思います。
しかし、Jitta氏もおっしゃっているように100%実行される保障はありません。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-08-01 22:31
> 現在Javascriptのwindow.onbeforeunload()
> でブラウザの×ボタンを押されたときのイベントは取得できるのですが、

これ、ページが遷移するときも走ったと思いますよ。
まぁ、いろいろ問題あるので、みなさんのいうとおり考え直しましょう。
Moo
大ベテラン
会議室デビュー日: 2004/04/12
投稿数: 118
お住まい・勤務地: 地球・港
投稿日時: 2006-08-02 08:50
ちょっと邪道なやり方として「ハートビート」があります。

1分に1回程度Ajaxなどで非同期通信をおこない、
その通信が途絶えればクライアントが閉じられたと認識する方法です。
(チェック間隔は調整してください)
_________________
ASP/ASP.NETだいすき。 ASP++ by Moo http://moo-asp.net/
日記は ほぼ毎日更新中 http://d.hatena.ne.jp/aspx/
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-08-02 09:46
初めにブラウザを2つ(A,B)開くようにしておいて、
ブラウザAからJavaScriptのタイマーでブラウザBの存在を
定期的に存在チェック。Bが存在しなくなった場合、サーバー
側にシグナルを送ってサーバー側の関数を実行という方式
はどうでしょうか。Mooさんの書かれたハートビート発信源を
ローカルPC上の他のブラウザに変えてみました。サーバー
側に通信が発生しないので、結構密な時間でチェックができて、
ブラウザが閉じられた直後に処理を走らせることができるかな
と考えました。
Aのブラウザが閉じられると困るので、それ用の対策を講じる
必要もありますね。


[ メッセージ編集済み 編集者: 小僧 編集日時 2006-08-02 09:51 ]
Moo
大ベテラン
会議室デビュー日: 2004/04/12
投稿数: 118
お住まい・勤務地: 地球・港
投稿日時: 2006-08-02 18:36
引用:

小僧さんの書き込み (2006-08-02 09:46) より:
初めにブラウザを2つ(A,B)開くようにしておいて、


IFRAMEやFRAMEを使うと...
_________________
ASP/ASP.NETだいすき。 ASP++ by Moo http://moo-asp.net/
日記は ほぼ毎日更新中 http://d.hatena.ne.jp/aspx/
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-08-02 18:53
引用:

IFRAMEやFRAMEを使うと...



ダメなパターンがあるのかな・・・。
別のブラウザにハートビートさせるのは、対象のブラウザが
閉じられても動くようにということだったんですが。

スキルアップ/キャリアアップ(JOB@IT)