Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript window.open only if the window does not already exist

Tags:

I have an application that opens a new window on clicking a link. This spawns a page that holds a Java applet. The problem I am having is that clicking the same link reloads the page, which resets the Java application. Is there any way to trap this? Two solutions that would be acceptable are:

  1. Allow multiple windows to be opened from the click handler
  2. Ignore subsequent requests if the window is already open

Apologies for being a Javascript newbie - it's not really my main thing.

The code attached to the handler is

function launchApplication(l_url, l_windowName) {   var l_width = screen.availWidth;   var l_height = screen.availHeight;    var l_params = 'status=1' +                  ',resizable=1' +                  ',scrollbars=1' +                  ',width=' + l_width +                  ',height=' + l_height +                  ',left=0' +                  ',top=0';    winRef = window.open(l_url, l_windowName, l_params);   winRef.moveTo(0,0);   winRef.resizeTo(l_width, l_height); } 

EDIT:

Thanks for the replies - I modified the suggestions slightly so that I could have more than one URL opened via the function.

EDIT2: There is another version of this code at Check for a URL open on another window

var g_urlarray = [];  Array.prototype.has = function(value) {     var i;     for (var i in this) {         if (i === value) {             return true;         }     }     return false; };   function launchApplication(l_url, l_windowName) {   var l_width = screen.availWidth;   var l_height = screen.availHeight;   var winRef;    var l_params = 'status=1' +                  ',resizable=1' +                  ',scrollbars=1' +                  ',width=' + l_width +                  ',height=' + l_height +                  ',left=0' +          ',top=0';   if (g_urlarray.has(l_url)) {     winRef = g_urlarray[l_url];   }   alert(winRef);   if (winRef == null || winRef.closed) {       winRef = window.open(l_url, l_windowName, l_params);       winRef.moveTo(0,0);       winRef.resizeTo(l_width, l_height);       g_urlarray[l_url] = winRef;   } } 
like image 656
Greg Reynolds Avatar asked Feb 09 '09 15:02

Greg Reynolds


People also ask

How do you check if a window is already open in JavaScript?

How to check if an opened browser window is closed or not in JavaScript? To check if an opened browser window is closed, you can use the closed property in referenced window object in JavaScript. The property returns a boolean true if the window is closed and false if the window is in the opened state.

Can JavaScript undefined Windows?

Is there ever a case when the window. document object is null or undefined? Yes, for JavaScript code that isn't in a document (e.g. node. js).

How do I open a closed window in JavaScript?

JavaScript provides an in-built function named close() to close the browser window that is opened by using window. open() method.

Does window open create a new session?

Its also a matter of fact the window. open creates a new window that shares session cookies.


2 Answers

I'd do it like this - basically store all the referenced opened windows on the function itself. When the function fires, check if the window doesn't exist or has been close - of so, launch the popup. Otherwise, focus on the existing popup window for that request.

function launchApplication(l_url, l_windowName) {   if ( typeof launchApplication.winRefs == 'undefined' )   {     launchApplication.winRefs = {};   }   if ( typeof launchApplication.winRefs[l_windowName] == 'undefined' || launchApplication.winRefs[l_windowName].closed )   {     var l_width = screen.availWidth;     var l_height = screen.availHeight;      var l_params = 'status=1' +                    ',resizable=1' +                    ',scrollbars=1' +                    ',width=' + l_width +                    ',height=' + l_height +                    ',left=0' +                    ',top=0';      launchApplication.winRefs[l_windowName] = window.open(l_url, l_windowName, l_params);     launchApplication.winRefs[l_windowName].moveTo(0,0);     launchApplication.winRefs[l_windowName].resizeTo(l_width, l_height);   } else {     launchApplication.winRefs[l_windowName].focus()   } } 
like image 111
Peter Bailey Avatar answered Sep 20 '22 01:09

Peter Bailey


You need to perform 2 tests... 1 check if the popup window is defined, and 2 check if it was closed.

if(typeof(winRef) == 'undefined' || winRef.closed){   //create new   winRef = window.open(....); } else {   //it exists, load new content (if necs.)   winRef.location.href = 'your new url';   //give it focus (in case it got burried)   winRef.focus(); } 
like image 35
scunliffe Avatar answered Sep 20 '22 01:09

scunliffe