【发布时间】:2010-12-19 04:05:14
【问题描述】:
我正在调用 javascript window.open() 函数以在弹出窗口中加载另一个 url。用户完成后,它会将他们带到最后一个页面,该页面有一个链接,上面写着关闭窗口,该窗口调用 window.close() 函数。现在,当该页面关闭时,我需要更新打开窗口的原始页面中的某些内容。有没有办法做到这一点?我必须调用原始页面中的函数。
【问题讨论】:
标签: javascript window
我正在调用 javascript window.open() 函数以在弹出窗口中加载另一个 url。用户完成后,它会将他们带到最后一个页面,该页面有一个链接,上面写着关闭窗口,该窗口调用 window.close() 函数。现在,当该页面关闭时,我需要更新打开窗口的原始页面中的某些内容。有没有办法做到这一点?我必须调用原始页面中的函数。
【问题讨论】:
标签: javascript window
你可以试试这个:
生成的窗口:
window.onunload = function (e) {
opener.somefunction(); //or
opener.document.getElementById('someid').innerHTML = 'update content of parent window';
};
父窗口:
window.open('Spawn.htm','');
window.somefunction = function(){
}
你不应该在父级上这样做,否则 opener.somefunction() 将不起作用, 做 window.somefunction 使 somefunction 成为公共的:
function somefunction(){
}
【讨论】:
随着jerjer answer(top),有时在你的父窗口和子窗口不是都是外部的或不是内部的你会看到一个未定义的opener问题,你不能访问父页面属性,见window.opener is undefined on Internet Explorer
【讨论】:
这是一个旧帖子,但我想我会添加另一种方法来做到这一点:
var win = window.open("http://www.google.com");
var winClosed = setInterval(function () {
if (win.closed) {
clearInterval(winClosed);
foo(); //Call your function here
}
}, 250);
您不必修改内容或使用子窗口中的任何事件处理程序。
【讨论】:
关注link。这也很有帮助..
在父窗口中:
function OpenChildAsPopup() {
var childWindow = window.open("ChildWindow.aspx", "_blank",
"width=200px,height=350px,left=200,top=100");
childWindow.focus();
}
function ChangeBackgroudColor() {
var para = document.getElementById('samplePara');
if (para !="undefied") {
para.style.backgroundColor = '#6CDBF5';
}
}
父窗口 HTML 标记:
<div>
<p id="samplePara" style="width: 350px;">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
</p><br />
<asp:Button ID="Button1" Text="Open Child Window"
runat="server" OnClientClick="OpenChildAsPopup();"/>
</div>
在子窗口中:
// This will be called when the child window is closed.
window.onunload = function (e) {
opener.ChangeBackgroudColor();
//or you can do
//var para = opener.document.getElementById('samplePara');
//if (para != "undefied") {
// para.style.backgroundColor = '#6CDBF5';
//}
};
【讨论】:
我知道这篇文章很旧,但我发现这确实很好用:
window.onunload = function() {
window.opener.location.href = window.opener.location.href;
};
window.onunload 部分是我在谷歌搜索此页面时发现的提示。谢谢,@jerjer!
【讨论】:
答案要求您将代码添加到生成的窗口中。那是不必要的耦合。
// In parent window
var pop = open(url);
pop.onunload = function() {
// Run your code, the popup window is unloading
// Beware though, this will also fire if the user navigates to a different
// page within thepopup. If you need to support that, you will have to play around
// with pop.closed and setTimeouts
}
【讨论】:
您可能想要使用“onbeforeunload”事件。它将允许您在子窗口关闭之前立即从子窗口调用父窗口中的函数。
所以大概是这样的:
window.onbeforeunload = function (e) {
window.parent.functonToCallBeforeThisWindowCloses();
};
【讨论】: