0

创建一个小型聊天应用程序,用户可以通过单击用户个人资料旁边的聊天按钮开始聊天。

一旦有人点击聊天按钮,就会出现一个弹出窗口。现在我想动态检测这个popus是否仍然打开或关闭。

如果弹出窗口打开=在通知中显示新消息警报。

如果弹出窗口关闭 = 不要在通知中提醒新消息(因为聊天窗口已经打开)

这是我尝试过的:

    <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

chkAlerts将始终将警报显示为 is 的初始newwindownull

假设您只希望在聊天窗口关闭后发出警报,调整逻辑以忽略初始 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 的引用将丢失。

是的,jan,这是实际的问题,你认为 javascript 中有什么函数可以做到这一点......还是我需要玩 session 或其他什么?

甚至无法使用会话或任何其他服务器巫术。

如果您确实需要跟踪聊天窗口,您的选择是将聊天包含在“打开器”页面上,并使其成为内联 AJAX 聊天。

您可以在所有页面上都有一个 AJAX 侦听器,并在您网站的所有打开的选项卡/窗口上“打开”该聊天窗口,这样用户就不会忘记它。

于 2012-10-25T18:29:06.460 回答
0

您的错误不在 javascript 代码中,在锚点中,您正在关闭函数调用中的双引号,它们必须是这样的:

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

无论如何,而且,正如您所看到的,您只存储最后打开的窗口,如果您有兴趣知道两者都已打开,您应该将 newwindow 创建为数组。

干杯,

于 2012-10-25T16:58:32.443 回答