【问题标题】:How can I refresh parent page when a pop up is close?弹出窗口关闭时如何刷新父页面?
【发布时间】:2012-02-28 19:34:15
【问题描述】:

我在弹出关闭时刷新主页的功能有一些问题。

在我的弹出页面中,我有以下 javascript

$(function () {        
    window.onunload = function () {
        if (window.opener && !window.opener.closed) {
            window.opener.popUpClosed();
        }
    };
});

在主页我有以下 javascript

$(function () {
    function popUpClosed() {
        window.location.reload();
    }
});

我收到一个错误,该对象不支持“popUpClosed”方法。

我在 StackOverflow 的 answer 上看到了这个解决方案,但我不知道如何解决这个错误。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    你试过下一个答案了吗:

    var myPop = "pop up window selector"
    myPop.onunload = function(){ 
      location.reload(); 
    };
    

    来源:Refresh parent window when the pop-up window is closed

    更新

    您可以像这样获得对窗口的引用:

    var windowObjectReference = window.open(strUrl, strWindowName[, strWindowFeatures]);
    

    来源:https://developer.mozilla.org/en/DOM/window.open

    更新

    我才发现window.opener.popUpClosed()在主页面上寻找全局作用域内的popUpClosed()函数,但实际上并没有在全局作用域内声明,试试这个:

    var popUpClosed = function () {
        window.location.reload();
    };
    

    删除围绕此的document.ready 事件处理程序将允许从子文档(如弹出窗口)访问它。另请注意,该函数现在声明为:var <name> = function () { ... };,它允许通过 window 对象访问它。

    【讨论】:

    • 但是如何做一个选择器来获取弹出窗口?
    • @Lucas_Santos 我更新了我的答案以演示获取对窗口的引用。
    • @Lucas_Santos 实际上我只是再次更新了我的答案,因为我认为您可以通过删除 popUpClosed() 函数周围的 document.ready 事件处理程序来修复您的代码。跨度>
    • 但是如何重新加载特定页面?父页面和另一个?
    【解决方案2】:

    这是因为window.opener 没有任何名为popUpClosed 的方法。像这样删除window.opener

    window.onunload = function () {
      if (window.opener && !window.opener.closed) {
        popUpClosed();
      }
    };
    

    【讨论】:

    • window.opener 是对打开当前文档的文档的window 对象的引用。所以window.opener 就像将window 用于父文档。
    • 我知道window.opener 是什么。我也知道它没有popUpClosed 方法。他需要扩展window.opener
    • 但是如何重新加载特定页面?父页面和另一个?
    • @NickBeranek 当您在全局范围内声明任何内容时,您可以通过window 对象访问它。例如:var key = 'val'; alert(window.key) 将输出val。所以你可以声明一个函数:function key () { return 'val'; } 并像这样运行它的代码:window.key();。因此,您可以向window 对象添加一个函数并从不同的文档访问它。这是一个演示:jsfiddle.net/jasper/xZYNk/1
    • window.opener.location.reload()代替window.location.reload()
    猜你喜欢
    • 2016-12-19
    • 2012-06-03
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 2012-07-09
    相关资源
    最近更新 更多