views:

339

answers:

2

Can the parent window be notified when a child window closes? (on a different domain?)

Trying to get around the window.opener not working when on different domains.

Can I at least be notified somehow when the child window closes?

A: 

You can't directly be notified of the window closing, but you can work out when the child window has been closed by inspecting the closed property on the window object reference returned by window.open().

Here's an example that will display an alert within 5 seconds of the child window being closed by polling the closed property:

var win = open('http://www.google.com');
var intervalId = setInterval(function() {
        if (win.closed) {
            clearInterval(intervalId);
            alert('Window closed! Hoorah!');
        }
    }, 5000);
Simon Lieschke
You cant be directly notified because the child window is in a separate domain, correct?
Adam
It's because there is no suitable browser event that you can use to work out when a window is closed.
Simon Lieschke
A: 

A better solution with two pieces of code 1/ in the popup :

$(window).bind('unload',
  function(){
    window.opener.PopupUnload(window)
  })

2/ in the parent (main window) :

function PopupUnload(wnd){
 setTimeout(function(){ // setTimeout is for IE
   if(wnd.closed)
     alert('You just killed me...')
  },10)
}

with this code, no function called forever (with setInterval()) and you make the difference between close and refresh popup (post/get)

(tested in IE8 and FF3)

Tomap
Your `window.opener.PopupUnload` call is going to fail if the parent and popup windows are loaded from different domains due to cross site scripting restrictions.
Simon Lieschke