我有一个主窗口和一个弹出窗口。弹出窗口在主窗口中创建。
类似parent.php
是主窗口。在这个页面上,我有一个JavaScript函数来重新加载页面,如下所示:
function popUpClosed() {
window.location.reload();
}
我们可以从parent.php打开弹出窗口。现在,当我们关闭/导航弹出窗口时,我想从弹出窗口中popUpClosed()
执行parent.php
函数。
我尝试过以下方法来实现同样的目标。
window.onunload = window.onbeforeunload = function() {
if(window.opener && !window.opener.closed) {
window.opener.popUpClosed();
}
};
window.onbeforeunload = Call;
function Call() {
if(window.opener && !window.opener.closed) {
window.opener.popUpClosed();
}
}
window.onpagehide = function() {
window.opener.popUpClosed();
}
除了谷歌浏览器之外,每个浏览器都能正常运行。 Chrome没有启动任何功能。
然而,这是在过去2-3天内发生的。之前所有的事情都在Chrome中运行良好。 (可能是由于最新的Chrome更新造成的)
任何建议都将受到赞赏。
答案 0 :(得分:1)
最新的Google Chrome浏览器存在window.opener
问题。最新版本中会忽略window.opener
处理程序内的beforeunload/unload
导航。但是有一个解决方法。请尝试以下代码:
var btn = document.getElementById("btn");
function detectClick(event) {
var wind = window.open('urlhere', 'name', 'width=' + screen.width/2 + ', height=' + screen.height/2);
wind.onbeforeunload = function(){
popupClosed(wind);
}
}
btn.addEventListener("click", detectClick, false);
function popupClosed(wind) {
setTimeout(function() {
wind.opener.location.href = window.location.href;
}, 0);
}

<input id= "btn" type="button" value="open popup" />
&#13;
这个代码是否会在这里执行堆栈溢出但是同时工作:Chrome
和Mozilla Firefox
通过jsfiddle
或服务器执行。
以下是有效的代码: jsfiddle
here是错误报告的链接,用于确认beforeunload/unload handler
问题。
答案 1 :(得分:-3)
您可以尝试以下代码:
我已经创建了打开POP上窗的常用功能:
function PopupCenter(url, title, w, h) {
var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left;
var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top;
width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;
var left = ((width / 2) - (w / 2)) + dualScreenLeft;
var top = ((height / 2) - (h / 2)) + dualScreenTop;
child = window.open(url, title, 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
if (child.focus) {
child.focus();
}
}
为了检查子窗口是否关闭,我使用的是setInterval
函数,并检查以下间隔:
function checkChild() {
if (child != undefined && child.closed) {
//alert("Child window closed");
clearInterval(timer);
location.reload();
}
}