2012-05-14 16 views
2

EDIT:この質問は次のように要約できます。別々のウィンドウで2つのHTMLページを分離すると、情報を非同期で交換できますか?ウィンドウ間の通信方法は?


クラスプロジェクトでは、Webベースのチャットクライアントを構築する必要があります。教授は実用的なサーバーを提供しました。

私はその一部を稼働させています。接続しているユーザーはすべてサーバーにメッセージを送信でき、接続されているすべてのユーザーに中継され、チャットルームのメインチャットウィンドウに表示されます。

ただし、クライアントには、プライベートメッセージを送受信するオプションが追加で必要です。プライベートメッセージを送信または受信すると、新しいウィンドウが開かれ、そのユーザーとの通信のためのチャットインターフェイスが表示されます。そのユーザーとの間でクライアントが送受信した今後のプライベートメッセージは、メインのチャットルームではなくこのウィンドウに表示されます。

私はにあります。になります。プライベートメッセージを受け取ったら、どうすれば新しいウィンドウを開くことができますか?そのウィンドウとの通信を継続します?メインウィンドウのwebsocket接続を介してそのユーザーからより多くのプライベートメッセージを受信した場合は、そのウィンドウに送信する必要があります。また、そのウィンドウから他のユーザーにメッセージを送信する場合は、メインウィンドウのwebsocket接続を介して中継する必要があります。

どうすればいいですか?

+0

あなたはCSSを使用して、同じウィンドウ内で独自の仮想 "ウィンドウ" を作成することができます。 – Mikey

+0

あなたはそれについて詳述できますか?別のページインスタンス、まったく新しいウィンドウ(またはタブ)である必要があります。私はあなたが何を意味するか分からない。 – Aerovistae

+0

これは代替案の提案に過ぎませんでした。新しいブラウザウィンドウを作成することは、達成しようとしている機能の古風で残念です。 @ zzzzBovの答えは必要なもののように見えます。 – Mikey

答えて

5

window.openは、新たに開いたウィンドウに属するwindowインスタンスを返します。新しいウィンドウで開いたアドレスが許容範囲内でsame origin policyにある場合は、現在アクティブなウィンドウを変更できるように、そのウィンドウとDOMを変更できます。

var w, 
    someElement; 
w = window.open('somepage.html', 'some window name', 'width=300,height=200'); 
someElement = w.document.getElementById('some-element-id'); 
+0

var windowObjectReference = window.open(strUrl、strWindowName [、strWindowFeatures]); < - それでは、新しいページの要素にどうやってアクセスしますか? windowObjectReference.getElementByID(id)? $(#id).do何か?そして、新しいウィンドウが元のページからjavascript関数を呼び出すことができると言うことですか? – Aerovistae

0

私はこのようにそれに取り組むだろう:

あなたのページ最初にすべての「パブリック」メッセージをチェックする、サーバへのAJAX呼び出しを行うためのsetTimeoutタイプの機能を起動し、使用しています。メッセージを投稿したいときは、別のAJAX呼び出しでパブリックメッセージを送信します。

私はおそらく、もう1つのAJAX呼び出しをサーバーに追加して、「私用の私的なメッセージは?」と尋ねるでしょう。サーバーは「Yep、userid 1234のものです」と応答することができます。その後、window.openを使って "FromUserID1234"という名前のウィンドウを開くことができます。参照を保存する(zzzzBowの答えの一部を使用)。その参照を使用して、受け取った将来のプライベートメッセージがあれば、すでにプライベートメッセージウィンドウが開いているかどうかを確認することができます。そうであれば、それを無視してから作成してください。これにより、プライベートメッセージウィンドウを開いたり、しばらく使用したりして閉じることができます。同じユーザーから別のメッセージが受信されると、別のウィンドウが開きます。

「FromUserID1234」という新しいウィンドウでは、AJAXを使用してサーバーと通信し、「ユーザーID 1234からメッセージがありますか」と尋ねます。サーバーは新しいもので応答し、メッセージを送信することもできます。

申し訳ありませんが、これは正確なコードそのものではありませんが、ここで問題の定義を開始してから、すべての問題を解決するための通信インターフェイスを構築します。

関連する問題