window.closed IE9 сообщает об истине, когда окно еще открыто - PullRequest
2 голосов
/ 09 декабря 2011

ОБНОВЛЕНИЕ 2012-01-10 URL-адрес всплывающего окна находится в другом домене в качестве родительского окна, что является проблемой!Как я могу решить это?

Я использую следующий код, чтобы определить, закрыто ли всплывающее окно.Он отлично работает в Firefox 8 и Chrome, но не работает должным образом в IE9.В IE9 предупреждение с «true» показывает уже, когда всплывающее окно все еще открыто.Почему в IE9 есть ссылка на окно, а свойство closed сообщает true, когда окно все еще открыто?И как я могу это исправить?

Javascript

var dialogWindow;
var dialogTimer;
function openDialog(url, name, options) {
 dialogWindow = window.open(url, name, options);   
 dialogTimer = setInterval(function() {   
  if(dialogWindow.closed) // IE9 reports true and executes function
  {  
   alert(dialogWindow.closed); // alert with "true"
   clearInterval(dialogTimer);  
   window.location.reload();  
  }  
 }, 2500);

 if (dialogWindow && dialogWindow.focus) 
  dialogWindow.focus();     
}

ОБНОВЛЕНИЕ Я также попробовал следующий подход, который показывает точно такое же поведение вIE9

var dialogWindow;
var dialogTimer;
function openDialog(url, name, options)
{
    dialogWindow = window.open(url, name, options);   
    dialogTimer = setInterval("checkDialogOpen()", 2500);

    if (dialogWindow && dialogWindow.focus) 
        dialogWindow.focus();     
}

function checkDialogOpen()
{
    if(dialogWindow.closed) 
    {  
        alert(dialogWindow.closed);
        clearInterval(dialogTimer);  
        window.location.reload();  
    } 
}

Ответы [ 2 ]

1 голос
/ 05 июня 2012

Из того, что я могу сказать, это ошибка в IE9.

http://support.microsoft.com/kb/241109

1 голос
/ 09 декабря 2011

у вас есть проблема с вашим скриптом. Измените:

dialogTimer = setInterval(function()
      {
        if(dialogWindow.closed) // IE9 reports true and executes function 
     {

на

dialogTimer = setInterval(function()
    {
        var dialogClosedStatus = dialogWindow.closed;
        if(dialogClosedStatus) // IE9 reports true and executes function
      { 

РЕДАКТИРОВАТЬ: Мой ввод был поддельным: исправлено Тестовая страница: http://jsfiddle.net/MarkSchultheiss/k2jHS/

специальное примечание: всплывающее окно будет появляться из-за перезагрузки вашего окна в моем примере тестовой страницы.

ПРИМЕЧАНИЕ: если это не помогает, попробуйте установить для переменной значение null, как в этом примере: http://jsfiddle.net/MarkSchultheiss/k2jHS/2/

...