当弹出窗口关闭时,有没有办法在不向弹出窗口添加任何JavaScript代码的情况下刷新父窗口?
我有一个名为parent.php的页面,在这个页面上,用户可以点击“打开弹出窗口”来打开一个弹出窗口。这个弹出窗口显示一些Flash内容,对我来说不可能添加类似于
window.onunload = function(){
window.opener.location.reload();
};
有没有其他方法可以实现这个目标? 谢谢
当弹出窗口关闭时,有没有办法在不向弹出窗口添加任何JavaScript代码的情况下刷新父窗口?
我有一个名为parent.php的页面,在这个页面上,用户可以点击“打开弹出窗口”来打开一个弹出窗口。这个弹出窗口显示一些Flash内容,对我来说不可能添加类似于
window.onunload = function(){
window.opener.location.reload();
};
有没有其他方法可以实现这个目标? 谢谢
为了使这在所有主要浏览器中工作,您需要在弹出窗口中处理unload
事件处理程序,并在主窗口中重新加载。在主窗口中添加以下内容:
function popUpClosed() {
window.location.reload();
}
在弹出窗口中:window.onunload = function() {
if (window.opener && !window.opener.closed) {
window.opener.popUpClosed();
}
};
那么通常情况下,如果你需要你的代码在所有浏览器中运行,特别是IE浏览器,答案通常是否定的。
var myPop = "pop up window selector"
myPop.onunload = function(){
location.reload();
};
onunload
属性。您只能从弹出窗口内部执行此操作。如果您不相信,请尝试一下(我使用的是IE 7,我相当确定IE 8的行为也是如此)。 - Tim DownTim Down的方法存在一个问题,那就是它没有回答原始问题。要求是你不能在弹出窗口中添加任何代码。
我找到的一个解决方案虽然不是特别优雅,但在我测试过的所有浏览器上都有效。
你只需简单地持续轮询新创建的窗口对象,检查它是否仍然打开。
在父窗口中:
var register;
var poll;
function isOpen(){
if(register.closed){alert("Closed!"); clearInterval(poll);}
}
function create(){
register = window.open("http://www.google.com","register","width=425,height=550");
poll=setInterval("isOpen()",100); //Poll every 100 ms.
}
我曾经遇到过类似的问题,无法检测父窗口中弹出窗口的关闭。我认为原因在于没有设置document.domain属性。
除了Tim Down的答案外,还可以像这样为窗口和弹出窗口都设置document.domain属性:
<script type="text/javascript">
document.domain='<?=$_SERVER['SERVER_NAME']?>';
</script>
而不是
window.onunload = function() {
if (window.opener && !window.opener.closed) {
window.opener.popUpClosed();
}
};
我在弹出窗口中使用了:
<body onunload="window.opener.popUpClosed();">