2015-11-04 125 views
1

我有一段代码在外部窗口中启动另一个页面。关闭f5刷新子窗口

var myOpenWindow = window.open(...); 

我在整个应用程序生命周期中管理此窗口,一旦论坛完成,我的管理状态关闭此窗口。

但是,我面临的问题是,如果用户点击f5进行硬刷新,窗口在加载主页面后仍然打开。

起初我以为我可以覆盖window.open来跟踪我的应用程序打开的窗口在全局变量中的状态。但是,我忽略了一个事实,即在f5重置我的全局丢失。

这似乎是一个简单的问题,但解决方案已经回避了我。无论如何要关闭父母刷新时打开的窗口window.open

+1

您应该能够使用卸载事件。见例如http://stackoverflow.com/questions/26324954/close-all-child-windows-when-parent-window-is-closed –

+1

你可以将你的全局变量存储在cookie或存储中而不是关闭窗口 – rafaelcastrocouto

+0

试试从bootstrap使用模式窗口。只要您关闭或重新加载页面,它将关闭 – kasynych

回答

1
var myOpenWindow = window.open(...); 
window.onunload = function(){myOpenWindow.close()}; 

或更好

window.addEventListener('unload',function(){myOpenWindow.close()}) 

应该这样做。

MDN: WindowEventHandlers.onunload

+0

谢谢,那正是我所需要的。 – Freddy

0

也许你可以使用一个DIV,并将其放置在屏幕的中央。添加一些jQueryUI魔法,你不必担心弹出窗口或拦截器或其他东西。

+0

我宁愿在'JQuery.dialog'中做到这一点,它只是在工作中没有选择。 – Freddy

0

你可以保持窗口打开,用下面的代码:

当你重新加载父页面,孩子会改变myOpenWindow当父页面将被载入。

父窗口:

function detectChild(child) { 
    myOpenWindow = child; 
    //opener.actionWhenOpen(); 
} 

var myOpenWindow = window.open(...); 

window.onunload = function() { 
    if (myOpenWindow) { 
     myOpenWindow.refreshParent(); 
    } 
}; 

子窗口:

if (opener) { 
    //opener.actionWhenOpen(); 
    opener.onunload = function() { 
     if (opener && opener.myOpenWindow) { 
      opener.myOpenWindow.refreshParent(); 
     } 
    }; 
} 

function refreshParent() { 
    this.i = ((this.i) ? this.i : 0)+1; 
    var i = this.i; 
    setTimeout(function() { 
     if (!opener) { 
      return console.log("Opener closed."); 
     } else if (opener.detectChild && !opener.myOpenWindow) { 
      this.i = 0; 
      opener.detectChild(window); 
     } else if (i < 900) { 
      console.log("Opener cheked("+i+")."); 
      refreshParent(i++); 
     } 
    }, 50); 
}