質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.37%

  • JavaScript

    21543questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • jQuery

    8566questions

    jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

  • Node.js

    2471questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • Socket.IO

    224questions

    Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

ページ移動後に処理がしたい

解決済

回答 4

投稿 ・編集

  • 評価
  • クリップ 0
  • VIEW 15K+

kooya

score 18

$(window).on('beforeunload', function() {
    return '移動していいですか?';
});
これだと移動する前にしか処理できなくて

$(window).unload(function() {
    alert('ページ移動');
});
これはうまく動かなかったんですが、
ページ移動するときに処理するにはどうしたらいですか?




-----追記--------

node.jsでゲームの開発をしています。

一対一の対戦で、ページを抜けたら抜けたプレイヤーは負けて、相手に勝利の告知をさせたいと考えています。

server側
socket.on('lose', function(data){
    socket.to(otherPlayer_id).emit('win');
    //勝敗による得点の計算
});

client側
socket.on('win', function(){
    //勝利時の画面処理
});

$(window).bind("beforeunload", function() {
    return ページを抜けたら勝負に負けます。よろしいですか?
});

function lose(){
    sokcet.emit('lose', data);
}

プレーヤーがページから離れようとして、「ページを離れる」ボタンを押した時に関数loseを実行したいと思っています。良い方法ありませんか?
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+1

ページ遷移してしまったらその画面から制御が外れてしまうので、何もできないのではないでしょうか?
もし何かしたいのであれば、遷移先の初期表示の方に仕込む必要があるのではないかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2014/11/24 18:01

    そもそも何をしたいのかがわからないと適切な回答は得られません。

    キャンセル

  • 2014/11/24 18:46

    そうですね。すみません。
    追記したのでよろしくお願いします。

    キャンセル

  • 2014/11/24 19:22

    強制的に閉じられたり、通信が途絶した場合まで考慮する必要があるのであれば、クライアント側からの定期的な通信で、サーバ側のタイマー処理が必要になると思います。

    キャンセル

0

TaMaMhyu さんの回答にあるように
... 遷移先の初期表示の方に仕込む必要がある...
と思います。

ページ遷移関係のイベントについての情報を紹介します。
- HTML5で追加になったEventハンドラを一覧にしました http://shared-blog.kddi-web.com/activity/221

- 今いるWEBページから別のWEBページに遷移した時に警告するJavaScript(jQuery) http://lab.boy.jp/m/%E4%BB%8A%E3%81%84%E3%82%8Bweb%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%8B%E3%82%89%E5%88%A5%E3%81%AEweb%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AB%E9%81%B7%E7%A7%BB%E3%81%97%E3%81%9F%E6%99%82%E3%81%AB%E8%AD%A6-31.html
... jQuery unload()を使ってできるようなのですが なんとjQuery 1.8で廃止に ...

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2014/11/24 16:57

    具体的に、ユーザーが「戻る」「更新」ボタンをおした時、またはタブを閉じた時に処理をさせたいので、遷移先が自分の管理するページじゃない時に間にページを挟むにはどうしたら良いですか?すいません。いまいち想像できません。

    キャンセル

  • 2014/11/24 17:13

    "page 移動後の処理" ではなく、あくまでも "page 移動前の処理" になりますが、
    こんな例をみつけました。
    - JavaScriptで前ページから受け取ったパラメータ先へリダイレクトする [http://www.nk0206.com/life/2014/04/js-redirect.html]

    本当に page 移動後に処理を組み込む必要があるケースがあるのですか?
    自分で作っているサイト内の任意のページに ページ表示前に処理を組み込むということなら、onload イベントで処理を
    組み込むことは可能になります。
    サイト外のページへの移動後に処理を組み込むことは セキュリティの面からも無理なのではと思います。

    キャンセル

  • 2014/11/24 17:56

    すべてのパラメータをスルー処理するための画面を用意して、遷移先をすべてそこに変えて、パラメータとして元の遷移先URLを追加で渡すような形になると思います。
    ただ、さすがにブラウザのタブやウィンドウを閉じた場合にその先を処理するのは無理です。この場合は直前の処理で実装する方法を検討する必要があります。

    キャンセル

0

今更ですが、socket.ioを使っているのであれば、サーバ側でdisconnectで処理をすればいいのではないでしょうか・・・?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2014/11/26 10:00

    たしかに!やってみます。

    キャンセル

0

非常な雑なコードですが
(function (){
  function setLoseAlertEvent (){
    removeLoseAlertEvent();
    alert("Your defeat...");
  }
  function removeLoseAlertEvent (){
    removeEventListener("blur",setLoseAlertEvent,false);
  }
  addEventListener("blur",setLoseAlertEvent,false);
}());
こういう処理でしょうか?

(function (){
  var newWindow=window.open("");
  newWindow.document.write("<script language='javascript'>alert('Your defeat...')</script>");
  newWindow.document.close();
}());

もしくはこういう類いですかね?
見当違いなら申し訳ないです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • JavaScript

    21543questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • jQuery

    8566questions

    jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

  • Node.js

    2471questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • Socket.IO

    224questions

    Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。