如何在焦点消失时关闭弹出窗口

时间:2012-01-25 11:02:05

标签: javascript html popup

要求:弹出窗口将从父窗口打开,当窗口中的焦点丢失时,它将被关闭。 (即使打开另一个应用程序窗口或聚焦时也会发生这种情况。)

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

问题: 弹出窗口中的单击使弹出窗口关闭。

兼容性: ie6及以上,firefox。

我从 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>

但是这里也存在一个问题,如果页面中有打印按钮,如果点击打印&gt;然后取消打印作业,弹出窗口将关闭。

有人能帮助我吗...

3 个答案:

答案 0 :(得分:1)

使用文档进行模糊事件

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

答案 1 :(得分:1)

sathishkumar的回答中的小修正

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

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

3. this.close在定义onblur事件

方面已经足够了
 var win = window.open("URL");
 var jqwin = $(win);
  $(jqwin).blur(function() {
    this.close();
 });

答案 2 :(得分:0)

你不能将onblur事件附加到BODY但是 你可以在窗口的Onblur事件上附加一个函数。

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

由于您已编辑了您的问题,因此您可以获得更多帮助here