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, c'est que cliquer sur le même lien recharge la page, qui réinitialise l'application Java. Y a-t-il un moyen de piéger cela? Deux solutions qui seraient acceptables sont les suivantes:

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

Excusez-moi d'être un débutant Javascript – ce n'est pas vraiment mon principal élément.

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

MODIFIER:

Merci pour les réponses – J'ai modifié légèrement les suggestions afin que je puisse avoir plus d'une URL ouverte via la fonction.

EDIT2: Il existe une autre version de ce code à Vérifier 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; } } 

    Je le ferais comme ceci – stocker essentiellement 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 si elle a été fermée, lancez la fenêtre contextuelle. Sinon, mettez l'accent 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() } } 

    Vous devez effectuer 2 tests … 1 vérifier si la fenêtre contextuelle est définie et 2 vérifier 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(); } 

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

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

    Vous pourriez vérifier comme ceci:

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

    Essayez de vérifier:

    Si (! Winref || winref.closed ||! Winref.document) {}