当窗口仍然打开时,window.closed IE9报告为true

时间:2011-12-09 14:34:56

标签: javascript internet-explorer-9 window.open window.closed

更新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 个答案:

答案 0 :(得分:1)

您的脚本存在问题 变化:

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/

答案 1 :(得分:1)

据我所知,这是IE9中的一个错误。

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