我之前已经问过这个问题,问题已经解决了一半,我帮助发现Javascript有一些严格的安全措施。
我学到了什么:父窗口打开一个子窗口。子窗口重定向到不同的域并重定向回。它会在关闭自身时尝试触发父窗口的功能。
window.opener.startLoad();
这会导致权限(安全)问题,并且无法正常工作。
(一半)新问题:我如何获得一个打开子窗口的窗口,当它关闭时在父窗口中运行一个函数?
我需要一种非常有效的方法,因为这将会发生很多事情!
感谢您的帮助。
答案 0 :(得分:21)
试试这个:
var win = window.open(url, name);
win.onunload = afterChildClose; // afterChildClose() is the function.
win.close(); // afterChildClose() should fire now.
所有这些代码都将在父窗口的javascript中找到并执行(包括afterChildClose())。您正在创建窗口并将该函数分配给卸载事件。
噢,我刚才想到的一件事。如果子窗口刷新或导航到另一个URL,则onunload事件也将触发。如果您只希望在窗口关闭时触发事件,则应在win.closed上包含checkChithClose()。编辑:这是两个示例页面的代码,我将它们放在一起试用。
父窗口:
<html>
<body>
<script type="text/javascript">
var win = window.open("secondwindow.html", "woo");
win.onunload =onun;
function onun() {
if(win.location != "about:blank") // This is so that the function
// doesn't do anything when the
// window is first opened.
{
alert("closed");
}
}
</script>
</body>
</html>
子窗口(“secondwindow.html”):
<html>
<body>
<script type="text/javascript">
setTimeout('window.close();', 5000);
</script>
</body>
</html>
当我尝试在firefox中打开第一个文档时,它打开窗口,窗口等待5秒并退出,第一个文档显示alert(),因此即使子窗口自行关闭它也能正常工作。
答案 1 :(得分:3)
我登陆这里寻找类似的功能,但可能永远不会让它与跨浏览器兼容性。所以这是另一种在子窗口关闭时执行代码的方法:
var win = window.open("http://www.google.com");
var winClosed = setInterval(function () {
if (win.closed) {
clearInterval(winClosed);
location.assign("http://www.bing.com/"); //Execute your code here
}
}, 250);
它不使用子窗口中的任何事件处理程序,也不需要修改子窗口的内容。