views:

198

answers:

2

Problem: Need to get a handle of an already opened javascript popup window (handle = window.open(…)) from its opener window, multiple requests later after its opener (parent) window has been refreshed and javascript variables reset.

For example, parent window could have javascript as follows:

<script type="text/javascript">
      var popupHandle;
      function openPopUp() {
            popupHandle=window.open('http://www.google.ca', 'popupTest');
            popupHandle.focus();
            return popupHandle;
      }
      // To get handle, need to reopen popup with same name as original (popupTest).
      function getPopUpHandle() {
            return openPopUp();
      }
      // If getting handle to close, open as small as possible and close so it’s not too noticeable.
      function closePopUp() {
            popupHandle=window.open('', 'popupTest', 'directories=no,location=no,menubar=no,status=no,resizable=no,scrollbars=no,titlebar=no,top=1,left=1,width=1,height=1');
            popupHandle.close();
      }
</script>

If you know of a better solution, please let me know.

How I am using it in my app: I have a list of images displayed on one side of the screen. On the other side I have a form that allows me to submit information based on the image. When the form is submitted, it attaches the image referenced.

When an image is clicked on, it opens in a popup.

When the form is submitted, the next image in the list should open in the popup. The popup could have been closed by the user.

A: 

Check out this site.. essentially, reopen the window or use frames to keep track of the handle.

fudgey
Thanks for the link, read that earlier. Can't use frames.
CalvinTreg
Looks like re-opening the window turned out to be the quickest solution. Thanks.
CalvinTreg
+1  A: 

It's a bit of a kludge, but you could put a script in the opened window that attempts to call a function on its window.opener to inform the parent window of its existence.

So, the image-display window would have a function like

setInterval(function(){ 
   if(window.opener.registerChildWindow){ 
        window.opener.registerChildWindow(window);
   } 
 }), 100);

This would attempt call the registerChildWindow function on the parent window 10 times a second, as long as that function exists, no matter what page the parent window was on. I'm not entirely sure how to get a window handle out of an existing window (passing window was a guess), but that should at least be something to play around with.

Luke Rinard