как закрыть всплывающее окно, когда из него вышел фокус - PullRequest
3 голосов
/ 25 января 2012

Требование: Откроется всплывающее окно из родительского окна, и оно должно закрыться, когда фокус из окна потерян. (Это должно происходить, даже если другое окно приложения открыто или находится в фокусе).

Пробный код: <body onBlur='javascript:window.close();'>

Проблема: При щелчке внутри тела всплывающего окна оно закрывается.

Совместимость: ie6 и выше, firefox.

Я получил обходной путь от http://pro -viousts.blogspot.com / 2006/10 / неправильное поведение окнаonblur.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 голосов
/ 28 мая 2013

Небольшие исправления в ответе сатишкумара

1. нам нужно преобразовать win в объект jquery

2.Применить размытие на jqvariable, а не на window

3. this.close достаточно хорош для определения onblur события

 var win = window.open("URL");
 var jqwin = $(win);
  $(jqwin).blur(function() {
    this.close();
 });
1 голос
/ 25 января 2012

Использовать документ для размытия

  var win = window.open("URL");
  $(window).blur(function() {
    win.close();
  });
0 голосов
/ 25 января 2012

Вы не можете прикрепить событие onblur к BODY, но
Вы можете прикрепить функцию к событию Onblur окна.

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

Поскольку вы отредактировали свой вопрос, вы можете получить дополнительную помощь здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...