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:
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;
}
}
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()
}
}
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();
}
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 pouvez vérifier comme ceci:
if(!winref || winref.closed)
{
}
Essayez de vérifier:
if (! winref || winref.closed ||! winref.document) {}