- - PR -
クライアントからサーバー側の関数の呼び出し
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-08-01 20:56
いつもお世話になっております。
現在Javascriptのwindow.onbeforeunload() でブラウザの×ボタンを押されたときのイベントは取得できるのですが、 そのときにサーバー側の関数を走らせたいのですが、良い考えが思いつきません。 ご教授よろしくお願いします。 | ||||
|
投稿日時: 2006-08-01 22:03
厳密には、「ブラウザの×ボタンを押されたときのイベント」なんてありません。
「クライアントが、正規の手順を踏まずにブラウザを終了させたとき」を考えるなら、
等のことも考えて、再設計しましょう。 | ||||
|
投稿日時: 2006-08-01 22:22
AJAX風に非同期通信すれば、サーバーの処理を実行できると思います。
しかし、Jitta氏もおっしゃっているように100%実行される保障はありません。 | ||||
|
投稿日時: 2006-08-01 22:31
> 現在Javascriptのwindow.onbeforeunload()
> でブラウザの×ボタンを押されたときのイベントは取得できるのですが、 これ、ページが遷移するときも走ったと思いますよ。 まぁ、いろいろ問題あるので、みなさんのいうとおり考え直しましょう。 | ||||
|
投稿日時: 2006-08-02 08:50
ちょっと邪道なやり方として「ハートビート」があります。
1分に1回程度Ajaxなどで非同期通信をおこない、 その通信が途絶えればクライアントが閉じられたと認識する方法です。 (チェック間隔は調整してください) _________________ ASP/ASP.NETだいすき。 ASP++ by Moo http://moo-asp.net/ 日記は ほぼ毎日更新中 http://d.hatena.ne.jp/aspx/ | ||||
|
投稿日時: 2006-08-02 09:46
初めにブラウザを2つ(A,B)開くようにしておいて、
ブラウザAからJavaScriptのタイマーでブラウザBの存在を 定期的に存在チェック。Bが存在しなくなった場合、サーバー 側にシグナルを送ってサーバー側の関数を実行という方式 はどうでしょうか。Mooさんの書かれたハートビート発信源を ローカルPC上の他のブラウザに変えてみました。サーバー 側に通信が発生しないので、結構密な時間でチェックができて、 ブラウザが閉じられた直後に処理を走らせることができるかな と考えました。 Aのブラウザが閉じられると困るので、それ用の対策を講じる 必要もありますね。 [ メッセージ編集済み 編集者: 小僧 編集日時 2006-08-02 09:51 ] | ||||
|
投稿日時: 2006-08-02 18:36
IFRAMEやFRAMEを使うと... _________________ ASP/ASP.NETだいすき。 ASP++ by Moo http://moo-asp.net/ 日記は ほぼ毎日更新中 http://d.hatena.ne.jp/aspx/ | ||||
|
投稿日時: 2006-08-02 18:53
ダメなパターンがあるのかな・・・。 別のブラウザにハートビートさせるのは、対象のブラウザが 閉じられても動くようにということだったんですが。 |