473,508 Members | 2,079 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Passing a Javascript window reference to the session

3 New Member
I have a web page where a member can open up a chat window (child window) with another member.
- From there the member can also navigate to other web pages.
- From other pages in the site, they may also open up new chat windows with other members (just not the same one).
- Each chat page is opened with the member name as the window name.
- When I log off from the web page, I would like all the chat windows to automatically close.

I have tried to create an array to store the window references from the created chats but the problem is that once I navigate to a different page, the array is not persisted (as per the Javascript memory scope).

I have tried the solution offered in
http://bytes.com/groups/javascript/8...e-page-another
However, this only works in IE and only for 1 open chat window. Once I have multiple chat windows up, it fails to close any of them. It also does not work for firefox with even 1 window.

Ideally, I would like to save each window reference back to the server as a session variable (using AJAX). I would store each reference in a session variable array. However, as a first step, I don't seem able to get the value of the window reference from within Javascript itself. When I try to examine the value (which I understand is a reference), I get '[object Window]'.

for example:

Expand|Select|Wrap|Line Numbers
  1. var newWin = open('chat.html', 'user1', ...)
  2. alert(newWin); // gives me a value of '[object Window]'
  3.  
My Ajax related code is written in anticipation of this working (see below) but unfortunately, I am passing '[object Window]'

Expand|Select|Wrap|Line Numbers
  1. function trackOpen(newWin) {
  2.     http.open('GET', 'windowmgmt.php?a=' + newWin);
  3.     http.onreadystatechange = handleResponse;
  4.     http.send(null);
  5.  
  6. }
  7.  

Does anyone know if this reference can be examined and I can get the value of this reference? I'm not even sure if my approach is even possible or if there is a better approach, so I am grateful for any advice.

Thanks.
Jan 22 '09 #1
5 10268
acoder
16,027 Recognized Expert Moderator MVP
If you see [object Window] then you have a reference which you can close with the close() method.

For subsequent windows, keep unique references, so that the first one is not overridden. Are all new windows opened from the first main parent web page, or could they be opened from the child windows?
Jan 23 '09 #2
aelred
3 New Member
Hi acoder,

All new chat windows are always opened from the first main parent web page. You are not able to open a chat window from another.

The problem is that I have to save this [object Window] reference to the session and keep the array of open windows in the session and when the user logs off make this available to the javascript.

I will give this a try assuming that the [object Window] when passed to the session can actually be passed back and used to close the window.

Thanks for your time to read and reply.
Jan 23 '09 #3
acoder
16,027 Recognized Expert Moderator MVP
No, it won't quite work like that.

When you create a new window:
Expand|Select|Wrap|Line Numbers
  1. var win = window.open(...);
win is a reference to the window. You can now close this window:
Expand|Select|Wrap|Line Numbers
  1. win.close();
If you move from this page, you would lose these references.

One possibility is to avoid pop-up windows and use chat pseudo-windows within the page using DHTML. The other possibility is to update the parent window with references to the child windows from the child windows by checking that the variable is set using window.opener.win. If not set, reset it to 'this'. I've not tested this, but it should work.
Jan 26 '09 #4
aelred
3 New Member
Hi acoder,

Thank you for your suggestion. I tried the second suggestion and this seemed to work very well. The only other thing I had to do was to keep sending the child reference to the parent (since everytime I navigate to another page on parent browser, the reference is lost again). I placed the window reference assignment as per the following:

Expand|Select|Wrap|Line Numbers
  1. function saveHandle()
  2. {
  3.     if (!window.opener.win) {
  4.         window.opener.win = this; 
  5.     }
  6.     setTimeout("saveHandle()",1000);
  7. }
  8.  
To close the window, I simply needed the following function:
Expand|Select|Wrap|Line Numbers
  1. function closeIMWindows() {
  2.     window.win.close();
  3. }
  4.  
However, is it possible for window.opener.win to be an array? since I have to keep track of multiple child windows?

I modified the previous code to:
Expand|Select|Wrap|Line Numbers
  1. function saveHandle()
  2. {
  3.     var found = false; 
  4.     var openWindows = window.opener.win.length;
  5.  
  6.     for(r=0;r<openWindows;r++) {
  7.  
  8.             if (this == window.opener.win[r])
  9.             {
  10.                 found = true;
  11.                 break;
  12.             } 
  13.     }
  14.  
  15.     if (found == false){
  16.         window.opener.win[window.opener.win.length+1] = this;
  17.     }    
  18.  
  19.     setTimeout("saveHandle()",1000);
  20.  
  21. }
  22.  
The issue is that 'window.opener.win.length' does not seem to be recognized and I am not sure how to specify window.opener.win as an array. Can you provide any other suggestions?

Thanks for your help thus far.
Jan 26 '09 #5
acoder
16,027 Recognized Expert Moderator MVP
win is just a variable name. It could be any valid variable name.

It needs to be an array, so when you create windows, add them to the array:
Expand|Select|Wrap|Line Numbers
  1. var win = []; // empty array
  2. win[0] = window.open(...);
In your code, you need to check for the existence of window.opener.win to avoid errors.
Jan 26 '09 #6

Sign in to post your reply or Sign up for a free account.

Similar topics

4
6358
by: Martin Lucas-Smith | last post by:
Having re-read www.php.net/functions.arguments recently, the notion of passing arguments by reference to a function makes a lot more sense now. However, my question is: is there any difference in...
4
3575
by: Amr Mostafa | last post by:
Hello :) I'm trying to write a script that deals with a web service. I'm using NuSoap class. my question is : Can I pass some variables By Reference to the web service and get the result back...
1
4347
by: David | last post by:
Hi, I use the following code to open a javascript window. Is it possible to modify this to have the standard toolbar open in the window? Thanks <script language="JavaScript"...
2
1614
by: learner | last post by:
Hi, In a page, i have many links. I have some functions in a global file which is included in all linked pages. I want to have a reference to a window which is to be opened on clicking one link...
26
45471
by: Dave Hammond | last post by:
In document "A.html" I have defined a function and within the document body have included an IFRAME element who's source is document "B.html". In document "B.html" I am trying to call the function...
12
2662
by: Andrew Bullock | last post by:
Hi, I have two classes, A and B, B takes an A as an argument in its constructor: A a1 = new A(); B b = new B(a1);
2
5873
by: Geoff Cox | last post by:
Hello, The code below is aimed at passing the date in the yyyyMMdd format from the javascript calendar in an html file to the php in a another file which then searches a MySQL database. For...
5
12896
by: zzapper | last post by:
Hi, I use a JavaScript window to access a library of songs when the user picks one this is written to the users database record (PHP/MySQL). When the use closes the JavaScript window he returns to...
5
2602
by: gvamohan | last post by:
hai every one iam opening an window through javascript <script type="text/javascript" language="javascript"> var k=false; ...
0
7226
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
7328
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
7388
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
7499
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
5631
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
1
5055
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
3199
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The...
0
1561
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...
1
767
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.