【问题标题】:window.closed IE9 reporting true when window is still openwindow.close IE9 在窗口仍然打开时报告 true
【发布时间】:2012-01-16 20:01:53
【问题描述】:

更新 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();  
    } 
}

【问题讨论】:

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


    【解决方案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/

    【讨论】:

    • 感谢您的建议,我认为var 应该第一个{ 之后,但即使那样也没有区别。它在 Firefox 和 Chrome 中仍然有效,但在 IE9 中仍然产生相同的错误行为。介意在这里详细说明你的思维方式吗?也许我无法掌握范围方面的某些方面。
    • 感谢您的更新,我在家里的概念验证中尝试了这个,它似乎产生了正确的行为,但我需要这个用于工作项目。所以下周我会在工作中尝试它,如果它解决了问题,我会接受你的回答。谢谢
    • 如果弹出 url 与父窗口在同一个域中,这似乎可以工作。如果弹出 url 在另一个域中,问题仍然存在。
    • +1 表示很好的尝试,但正如 Oblivion2000 所指出的,这是 IE9 中的一个错误,因此您都无法提供正确的解决方案。
    • 感谢您的反馈。需要注意的是,它适用于我在 Windows 7 上的 IE9 中,因为我刚刚对其进行了测试:) 所以也许他们在某处修复了它? IDK,我没研究过。
    【解决方案2】:

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

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

    【讨论】:

    • 不错的发现。这不是一个真正的解决方案,但至少现在我知道这不是我疯了。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 2020-03-14
    相关资源
    最近更新 更多