【发布时间】:2011-02-15 22:55:28
【问题描述】:
我正在创建一个弹出窗口。在我完成子(弹出)窗口的工作并单击关闭按钮后,我需要调用父窗口的 javascript 函数。我怎样才能做到这一点。 我不是自己创建子窗口,而是显示其他一些 url 的内容。
【问题讨论】:
标签: javascript javascript-events
我正在创建一个弹出窗口。在我完成子(弹出)窗口的工作并单击关闭按钮后,我需要调用父窗口的 javascript 函数。我怎样才能做到这一点。 我不是自己创建子窗口,而是显示其他一些 url 的内容。
【问题讨论】:
标签: javascript javascript-events
我不认为你可以得到一个事件,因为当 URL 来自不同的域时,你不能弄乱文档本身。但是,您可以轮询并检查窗口对象的“关闭”属性:
var w = window.open("http://what.ever.com", "OtherWindow");
setTimeout(function() {
if (w.closed) {
// code that you want to run when window closes
}
else
setTimeout(arguments.callee, 100);
}, 100);
如果您愿意,也可以启动间隔计时器:
var w = window.open("http://what.ever.com", "OtherWindow");
var interval = setInterval(function() {
if (w.closed) {
// do stuff
cancelInterval(interval);
}
}, 100);
【讨论】:
如果子窗口不是来自与父窗口相同的域名,则由于同源策略,您将被锁定。这样做是为了防止跨站点脚本攻击 (XSS)。
【讨论】:
不要为此投票。这只是对 Pointy 代码的改进,以摆脱 arguments.callee。投票给Pointy。
var w = window.open("http://what.ever.com", "OtherWindow");
setTimeout(function timeout() {
if (w.closed) {
// code that you want to run when window closes
}
else
setTimeout(timeout, 100);
}, 100);
【讨论】:
function(){var timeout = arguments.callee;}
setTimeout(function fnName(){}, n) 在 Safari 2.x 中显然会失败(现在已经 5 岁了,而且完全不相关,IMO)。