web-dev-qa-db-fra.com

JavaScript window.open uniquement si la fenêtre n'existe pas déjà

J'ai une application qui ouvre une nouvelle fenêtre en cliquant sur un lien. Cela génère une page contenant une applet Java. Le problème que j'ai est que le fait de cliquer sur le même lien recharge la page, ce qui réinitialise l'application Java. Est existe-t-il un moyen de piéger cela? Deux solutions qui seraient acceptables sont:

  1. Autoriser l'ouverture de plusieurs fenêtres à partir du gestionnaire de clics
  2. Ignorer les requêtes suivantes si la fenêtre est déjà ouverte

Toutes mes excuses pour être un débutant Javascript - ce n'est pas vraiment mon principal truc.

Le code attaché au gestionnaire est

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);
}

ÉDITER:

Merci pour les réponses - j'ai légèrement modifié les suggestions afin de pouvoir ouvrir plus d'une URL via la fonction.

EDIT2: Il existe une autre version de ce code à Vérifiez une URL ouverte sur une autre fenêtre

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;
  }
}
21
Greg Reynolds

Je le ferais comme ceci - essentiellement stocker toutes les fenêtres ouvertes référencées sur la fonction elle-même. Lorsque la fonction se déclenche, vérifiez si la fenêtre n'existe pas ou a été fermée - lancez donc la fenêtre contextuelle. Sinon, concentrez-vous sur la fenêtre contextuelle existante pour cette demande.

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()
  }
}
20
Peter Bailey

Vous devez effectuer 2 tests ... 1 vérifiez si la fenêtre contextuelle est définie et 2 vérifiez si elle a été fermée.

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();
}
20
scunliffe

Vous pouvez utiliser quelque chose comme ça dans la page qui ouvre la nouvelle fenêtre:

var newWindow = null;

function launchApplication()
{
  // open the new window only if newWindow is null (not opened yet)
  // or if it was closed
  if ((newWindow == null) || (newWindow.closed))
    newWindow = window.open(...);
}
5
M4N

Code de travail

var newwindow = null;
function popitup(url) {
    if ((newwindow == null) || (newwindow.closed)) {
        newwindow=window.open(url,'Buy','width=950,height=650,scrollbars=yes,resizable=yes');
        newwindow.focus();
    } else {
        newwindow.location.href = url;
        newwindow.focus();    
    }
}  
3
Pad

Vous pouvez vérifier comme ceci:

if(!winref || winref.closed)
{
}
2
Phaedrus

Essayez de vérifier:

if (! winref || winref.closed ||! winref.document) {}

0
chrism