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:
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) {}