2

編集:この質問は次のように要約できます:別々のウィンドウで2つの別々のhtmlページが非同期で情報を交換するにはどうすればよいですか?


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

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

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

私は完全に途方に暮れています。プライベートメッセージを受信した後、新しいウィンドウを開いてそのウィンドウとの通信を続行するにはどうすればよいですか?メインウィンドウのWebSocket接続を介してそのユーザーからさらにプライベートメッセージを受信する場合は、そのウィンドウに送信する必要があり、そのウィンドウから他のユーザーにメッセージを送信する場合は、メインウィンドウのWebSocket接続を介して中継する必要があります。

それが可能であるならば、これはどのように行うことができますか?

4

3 に答える 3

5

window.openwindow新しく開いたウィンドウに属するインスタンスを返します。新しいウィンドウで開いたアドレスが同一生成元ポリシーに該当する場合は、現在アクティブなウィンドウを変更できるのと同じように、アドレスとそのDOMを変更できます。

var w,
    someElement;
w = window.open('somepage.html', 'some window name', 'width=300,height=200');
someElement = w.document.getElementById('some-element-id');
于 2012-05-14T01:56:20.627 に答える
0

私はこのようにそれに取り組みます:

ページは最初に起動し、setTimeOutタイプ関数を使用してサーバーへのAJAX呼び出しを実行し、すべての「パブリック」メッセージをチェックします。メッセージを投稿する場合は、別のAJAX呼び出しを実行してパブリックメッセージを送信します。

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

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

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

于 2012-05-14T02:17:54.103 に答える
0

SignalRを使用します。それはあなたがやりたいことに焦点を当てています。ハッピーコーディング!:)

このリンクを参照してください:SignalRとのリアルタイムの永続的な長時間接続を備えた非同期のスケーラブルなWebアプリケーション

http://www.youtube.com/watch?v=1wh33W-09bk

于 2012-05-14T02:32:20.117 に答える