弹出窗口以在关闭时将数据返回给父级

Posted

技术标签:

【中文标题】弹出窗口以在关闭时将数据返回给父级【英文标题】:Popup window to return data to parent on close 【发布时间】:2012-03-05 18:34:06 【问题描述】:

我使用window.open() 打开了一个弹出窗口。我现在想要的是让用户能够点击这个新窗口中的 2 个链接之一:“允许”或“不允许”。

当用户单击其中一个链接时,“弹出”窗口应该关闭,并返回“允许”或“不允许”或类似的内容,true/false 会这样做,到父窗口。

有可能吗?如果有,怎么做?

代码:

var authWindow = window.open('auth.php', 'authWindow', 'options...');

那么 auth.php 内只有 2 个锚点?

【问题讨论】:

到目前为止,您自己尝试过吗?您可以使用模态弹出窗口 已发布代码?虽然我真的看不出有必要,哈哈。 之后你将如何处理这些值? 我个人尽量避免弹出窗口。通常我使用 jquery-ui 对话框(或 flowtools 覆盖,或 wijmo 对话框)来模拟弹出行为。 IMO 它看起来更好,更干净,并且避免了浏览器阻止弹出窗口的问题 - 只是一个小评论:) 【参考方案1】:

在调用(父)窗口中添加这样的JS代码:

function HandlePopupResult(result) 
    alert("result of popup is: " + result);

在子窗口代码中添加:

function CloseMySelf(sender) 
    try 
        window.opener.HandlePopupResult(sender.getAttribute("result"));
    
    catch (err) 
    window.close();
    return false;

并且有这样的链接可以关闭弹窗:

<a href="#" result="allow" onclick="return CloseMySelf(this);">Allow</a>
<a href="#" result="disallow" onclick="return CloseMySelf(this);">Don't Allow</a>

【讨论】:

function CloseMySelf 导致错误,因为链接直接指向 # 并且窗口没有关闭。 @Joey 抱歉,我的代码中有错误.. 立即查看。 (在 javascript 中,catch 必须有以下括号) 好奇:您是否有理由不将“允许”或“禁止”作为参数传递给 CloseMySelf() 函数?使用结果属性设计有什么好处? @SteveK 更好地分离了逻辑和代码,因为“允许”和“禁止”是元素本身的一部分,至少在我看来。还提供更好的灵活性,例如如果我们以后想使用更多参数,只需从元素本身读取它们即可。 如果父页面和子页面在同一台服务器上,这只会起作用,对吗?【参考方案2】:

您可以为此使用window.opener

【讨论】:

以上是关于弹出窗口以在关闭时将数据返回给父级的主要内容,如果未能解决你的问题,请参考以下文章

访问 kivy 弹出父级

怎么点击确定按钮关闭当前窗口,并返回父页面,并且父页面刷新。

将 JDialog 居中于父级之上

求关于弹出层给父窗口赋值的代码

关闭jQUERY中的弹出窗口后如何刷新父页面? [复制]

在mfc中 为啥关闭子窗口连带把主窗口关闭了??