0

ユーザーのプロファイルの横にあるチャット ボタンをクリックしてチャットを開始できる小さなチャット アプリケーションを作成します。

誰かがチャット ボタンをクリックすると、ポップアップ ウィンドウが表示されます。このポップスがまだ開いているか閉じているかを動的に検出したいと思います。

ポップアップが開いている場合=新着メッセージアラートを通知に表示します。

ポップアップが閉じている場合 = 通知で新しいメッセージを警告しない (チャット ウィンドウが既に開いているため)

これは私が試したものです:

    <a href="#" onclick="popitup("http://domain.com/chat/2")">Chat with user 2</a>
    <a href="#" onclick="popitup("http://domain.com/chat/1")">Chat with user 1</a>
// on document ready
setInterval(function(){
    chkAlerts();
}, 10000);

var newwindow = null;

function popitup(url) {
    if ((newwindow == null) || (newwindow.closed)) {
        newwindow = window.open(url,'Buy','width=950,height=650,scrollbars=yes,resizable=yes');
        newwindow.focus();
    } 
    else {
        newwindow.location.href = url;
        newwindow.focus();    
    }
}  

function chkAlerts(){
    if ((newwindow == null) || (newwindow.closed)) {
        //Do something
        alert('now window is closed show alerts');
    }
}

このコードで私はいつも得ています

alert('now window is closed show alerts');
4

3 に答える 3

0

あなたのエラーはjavascriptコードではなく、アンカーにあります。関数の呼び出し内で二重引用符を閉じています。次のようにする必要があります。

<a href="#" onclick="popitup('http://domain.com/chat/2')">Chat with user 2</a>

とにかく、ご覧のとおり、最後に開いたウィンドウのみを保存しています。両方が開いていることに関心がある場合は、 newwindow を配列として作成する必要があります。

乾杯、

于 2012-10-25T16:58:32.443 に答える
0

chkAlertsnewwindowisの初期値として常にアラートを表示しますnull

チャット ウィンドウが閉じられた後にのみアラートが必要であると仮定すると、初期 null状態を無視するようにロジックを微調整します。

function chkAlerts(){
    if ((newwindow != null) && (newwindow.closed)) {
        //Do something
        alert('now window is closed show alerts');
    }
}​
于 2012-10-25T16:34:02.117 に答える
0

コメントからの続き:

ご存知のように、ウィンドウ オープナー ページからリロードまたは移動すると、newwindow への参照が失われます。

はい、1月、これは実際の問題です。JavaScriptにこれを行う関数があると思いますか...または、セッションなどで遊ぶ必要がありますか?

セッションやその他のサーバー ソーサリーでは不可能です。

本当にチャット ウィンドウを追跡する必要がある場合のオプションは、「オープナー」ページにチャットを含めて、インライン AJAX チャットにすることです。

すべてのページに AJAX リスナーを配置し、サイトの開いているすべてのタブ/ウィンドウでそのチャット ウィンドウを「開く」ことができるため、ユーザーはそれを見失うことがありません。

于 2012-10-25T18:29:06.460 に答える