检查弹出窗口状态

时间:2011-04-28 16:45:43

标签: javascript

当有人请求聊天时,会在数据库中输入一个条目。我的仪表板上有一个隐藏的iframe,它每20秒检查一次数据库,看是否有聊天,如果有则启动弹出窗口。即使弹出窗口打开,iframe仍会每20秒刷新一次弹出窗口。希望我尝试实现的是一个javascript来检查弹出窗口的状态。如果它关闭了我希望它重新打开它...如果它打开然后它将它聚焦...但我不希望弹出窗口刷新...因为我有一个ajax脚本这样做..

这是我的代码:

<script language="javascript" type="text/javascript">
function myOpenWindow(winURL, winName, winFeatures, winObj)
{
     var theWin;
     if (winObj != null)
     {
          if (!winObj.closed)
          {
               winObj.focus();
               return winObj;
          }
     }
     else
     {
          theWin = window.open(winURL, winName, winFeatures);
          return theWin;
     }
} 
</script>
<% IF ChatSessionID <> "" THEN %>
<script language="javascript" type="text/javascript">
var gmyWin = null;
window.onload = function()
{
     var w = 900;
     var h = 500;
     var l = (screen.width-w)/2;
     var t = (screen.height-h)/2;
     var params = 'status=0,resizable=0,scrollbars=0,width=' + w + ',height=' + h + ',left=' + l + ',top=' + t;
     gmyWin = myOpenWindow("/chat/chat_window.asp?ChatSession=<%=ChatSessionID%>&id=3", "myWin", params, gmyWin)
}
</script>
<% END IF %>

非常感谢您提供的任何帮助..

最诚挚的问候, 保罗

3 个答案:

答案 0 :(得分:1)

我不确定,但我相信如果你在调用window.open时命名窗口(例如myWin),然后再使用相同的名称再次调用window.open,它将返回现有窗口if它已经打开或打开/重新打开窗口并返回一个句柄。

修改

啊,你去了 - 来自window.open

  

如果是带有名称的窗口   strWindowName已经存在,那么,   而不是打开一个新窗口,   strUrl被加载到现有的   窗口。在这种情况下返回值   该方法是现有的窗口   和strWindowFeatures被忽略。   为strUrl提供一个空字符串   是一种获得对开放的引用的方法   窗口的名称没有改变   窗口的位置。如果你想   打开每个电话的新窗口   window.open(),你应该使用   特殊值_blank for   strWindowName。

我相信根据上面提到的规范,这个可能工作:

var hChatWindow = window.open("", "ChatWindow", "whatever features"); // url intentionally left blank
// hChatWindow now contains a reference to new, existing or re-opened window
hChatWindow.focus();
if (hChatWindow.location=="about:blank") {                            // not sure; you need to experiment here
    hChatWindow.location = "/chat/chat_window.asp?whatever";
}

Demo heresource here

答案 1 :(得分:0)

gmyWin.onunload上注册回调。

答案 2 :(得分:0)

你会发现在大多数浏览器中颠覆“阻止弹出窗口”很棘手。但是,如果禁用它,则以下操作将起作用。

主窗口:

var status = false;

function winOpen(){
    window.open("child.html");
}

function winStatus(){
    alert(status);
}

弹出窗口:

window.opener.status = true;

window.onblur = window.focus;

window.onunload = function(){
    window.opener.status = false;
};