当焦点从弹出窗口移开时如何关闭弹出窗口

5

需求: 从父窗口打开一个弹出窗口,当焦点从窗口移开时应该关闭它。即使打开了另一个应用程序窗口或将其置于焦点状态,也应该发生这种情况。

尝试的代码: <body onBlur='javascript:window.close();'>

问题: 在弹出窗口的主体内单击会导致弹出窗口关闭。

兼容性: ie6及以上版本,火狐浏览器。

我从http://pro-thoughts.blogspot.com/2006/10/incorrect-behavior-of-windowonblur.html得到了一个解决方法。

var active_element;  
var bIsMSIE;

function initiateSelfClosing() {  
  if (navigator.appName == "Microsoft Internet Explorer") {  
    active_element = document.activeElement;  
    document.onfocusout = closeWnd;  
    bIsMSIE = true;  
  }  
  else { window.onblur = closeWnd; }  
}

function closeWnd() {  
  if (window.opener != null) {  
    if (bIsMSIE && (active_element != document.activeElement)) {  
      active_element = document.activeElement;  
    }  
    else {  
      window.close();  
    }  
  }  
}  


<body onload="initiateSelfClosing()">  
</body>

但这里也有一个问题,如果页面上有一个打印按钮,而且我点击打印,但取消了打印作业,则弹出窗口会关闭。
请问有人可以帮助我吗?
3个回答

2

对sathishkumar的答案进行小改动

1.我们需要将win转换为jquery对象

2.在jqvariable上应用模糊事件,而不是window

3.this.close在定义onblur事件时已经足够了

 var win = window.open("URL");
 var jqwin = $(win);
  $(jqwin).blur(function() {
    this.close();
 });

1

使用 document 处理模糊事件

  var win = window.open("URL");
  $(window).blur(function() {
    win.close();
  });

我不确定,但是该文档没有 onblur 事件。 - Pranav

1

你不能给BODY附加onblur事件,但是你可以在window的onblur事件上附加一个函数。

<script type="text/javascript">
    function closeme()
    {  
        window.close();
    }
    window.onblur=closeme;
</script>

由于您已经编辑了您的问题,您可以在这里获得更多帮助。


谢谢帮助。但是这也显示了与我的代码片段所显示的相同的问题。弹出窗口在页面内单击后关闭。 - jijo thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接