2

UPDATE 2012-01-10
弹出的网址是另一个域作为父窗口,这似乎是问题!我该如何解决它?window.closed IE9时,窗口仍处于打开状态报告真实

我使用下面的代码来检测弹出窗口是否关闭。它在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();  
} 

UPDATE 我也尝试以下方法,这显示了在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(); 
    } 
} 

回答

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/

+0

感谢您的建议,我认为'var'应*第一个''{,但即使如此,没有什么区别后*。它仍然可以在Firefox和Chrome中运行,但在IE9中仍会产生相同的错误行为。请介绍一下你在这里的思维方式?我可能无法掌握范围方面的某些方面。 – Bazzz

+0

感谢您的更新,我在家中的一个概念验证中尝试了这一点,它似乎导致了正确的行为,但我需要在工作中使用这个项目。所以下周我会在工作中尝试它,如果它解决了这个问题,我会接受你的答案。谢谢 – Bazzz

+0

如果弹出式URL与父窗口位于同一个域内,这似乎可行。如果弹出网址在另一个域中,问题依然存在。 – Bazzz

相关问题