[thelist] Popup and opener interaction

Rick den Haan rick.denhaan at gmail.com
Fri Feb 2 09:48:11 CST 2007


List,

We're currently building a live support-application using a centrally 
hosted javascript/php/mysql application. Centrally hosted, so our 
customers need only include three brief lines of javascript into all 
pages on their website they want the support to be available on.

Our application uses a popup-window for the communication. What I'd 
like, is to know when the visitor closes that pop-up. Currently, I'm 
checking whether the window has been closed every second, using this 
relevant portion of our code:

var oCommunication;
var oComCheckInterval;

function beginCommunication()
{
    oCommunication = window.open(sComUrl, 'SupportCommunication', 
sComProps);
    if (typeof oCommunication == "undefined" || oCommunication == null) 
alert(sPopupBlockerWarning);
    if (!oCommunication.opener) oCommunication.opener = self;

    oComCheckInterval = setInterval("checkComClosed()", 1000);
}

function checkComClosed()
{
    if (typeof oCommunication == "object" && oCommunication.closed)
    {
       oCommunication = null;
       clearInterval(oComCheckInterval);
       // message to server -> client closed window
    }
}


Now, here's the problem:

It is quite possible for the visitor to browse the website (opener) 
while the popup is open. In that case, the oCommunication variable is 
reset, and I've lost track of whether or not the popup is still open. 
I'm reluctant to use onunload in the popup, because that will also be 
called if the user refreshes the popup window. Besides, running a quick 
message to the server indicating the window is about to close doesn't 
always work if the connection is slow (it's cross-domain, so we had to 
come up with something other than an XHR).

I already tried sending a regular signal to opener from the popup, but 
since the opener is the customer's website, and the popup is running on 
our server, some browsers don't allow that, because it's cross-domain.

Now the popup has a name (SupportCommunication). I mean, when I try to 
open another session from the opener, using the same functions, a second 
popup is *not* opened, but the already open one is redirected. Is it 
possible to check for this name somehow? I haven't found anything like 
this on Google.

I've tried these (and variations) but this approach doesn't seem to work:

oCommunication = window.SupportCommunication;
oCommunication = window['SupportCommunication'];
oCommunication = window.frames['SupportCommunication'];
oCommunication = document.SupportCommunication;

Is what I want even possible?

Thanks in advance for any help,

Rick.



More information about the thelist mailing list