2010-07-08 4 views
0

De cette façon, je reçois la référence à la fenêtre ouverte:window.open créer référence au nom basé

var refWin = window.open("mypage1", "name_mypage"); 

si vous voulez fermer la fenêtre, je ferme avec:

refWin.close(); 

si Je fais un rafraîchissement d'écran (F5) et exécute la même ligne, il s'ouvre dans la même fenêtre, car je mets le même nom.

var refWin = window.open("mypage2", "name_mypage"); 

mais avec une référence différente (refWin). Question: comment je peux faire référence à la fenêtre en fonction du nom?, J'ai besoin de fermer la fenêtre avant l'ouverture, avec le même nom.

faire quelque chose comme:

var refWin = window.open("about:blank", "name_mypage"); 
refWin.close(); 
refWin = window.open("mypage2", "name_mypage"); 

mais sans avoir à être une fenêtre vide pour référence.

grâce

+0

Si je comprends correctement, vous voulez être en mesure d'ouvrir une fenêtre, rafraîchir la page (F5), puis fermez la fenêtre. Est-ce exact? –

+0

mais pourquoi le fermer et le rouvrir? vous pouvez redimensionner/changer l'emplacement sans le fermer – Lauri

+0

@Ryan Kinal, j'ai besoin d'ouvrir une nouvelle page (ou image) dans la même fenêtre et de faire la mise au point. si j'ouvre un avec le même nom, changez le site Web mais ne se concentre pas sur la fenêtre. Pour cette raison besoin de fermer la fenêtre. mais préfèrent ne pas ouvrir une nouvelle fenêtre pour seulement fermer. Comme peut être référencé par le même nom en ouvrant un nouveau, je voudrais le faire, mais seulement pour le fermer. –

Répondre

0

ma solution basée sur un autre script:

Helper.window = new function() { 

    // Private fields 
    var w = window, s = screen, _self = this, whs = {}, isChrome = /chrome/.test(navigator.userAgent.toLowerCase()); 

    // Public Members 
    this.focus = function (wh) { 
     if (!wh) return; 
     if (isChrome) wh.blur(); 
     wh.focus(); 
    }; 

    this.windowExists = function (wt) { 
     return wt && whs[wt] && (typeof whs[wt]['closed'] != undefined) && !whs[wt].closed; 
    }; 

    this.close = function (wt) { 

     if (typeof whs[wt][close] != undefined) whs[wt].close(); 
     whs[wt] = null; 

     return _self; 
    }; 

    this.properties = function (wp) { 

     wp = (wp || 'menubar=yes').toLowerCase(); 

     if (!(/menubar/.test(wp))) 
      wp += 'menubar=yes'; 

     if (!(/location/.test(wp))) 
      wp += ',location=yes'; 

     if (!(/width/.test(wp))) 
      wp += ',width=' + (s.availWidth - 150); 

     if (!(/height/.test(wp))) 
      wp += ',height=' + (s.availHeight - 150); 

     if (!(/scrollbars/.test(wp))) 
      wp += ',scrollbars=yes'; 

     if (!(/resizable/.test(wp))) 
      wp += ',resizable=yes'; 

     return wp; 
    }; 

    this.open = function (url, wt, wp) { 

     if (_self.windowExists(wt)) 
      return _self.close(wt).open(url, wt, wp); 

     var urlOpen = ''; 
     if (typeof url == 'string') { 
      urlOpen = url; 
     } else if (jQuery(url).get(0).tagName.toLowerCase() == 'a') { 
      urlOpen = jQuery(url).attr('href'); 
     } else { 
      urlOpen = 'about:blank'; 
     } 

     wp = _self.properties(wp); 
     wt = wt || "_blank"; 

     var wh = wp ? w.open(urlOpen, wt, wp) : w.open(urlOpen, wt); 

     if (wh && "_blank" !== wt) { 
      whs[wt] = wh; 
      _self.focus(wh); 
     } 

     return wh; 
    }; 

}; 
0

Basé sur le commentaire de andres, voici la solution qu'il cherche:

refWin.location = "myurl"; 
refWin.focus(); 

Cela ouvrira "myurl" dans la fenêtre, et la concentrer.

Or. De

var refWin = window.open("mypage1", "name_mypage"); 
refWin.focus(); 

Edit:

Si vous n'êtes pas recharger la page à nouveau, il ne devrait pas être une raison quelconque vous ne pouvez pas faire ceci:

var refWin = window.open("mypage1", "name_mypage"); 
refWin.close(); 
refWin = window.open("mypage1", "name_mypage"); 

Si vous re vraiment préoccupé à ce sujet, vous pouvez faire votre propre "windows" objet:

var windows = {}; 
var refWin = window.open("mypage1", "name_mypage"); 
windows[refWin.name] = refWin; 
windows("name_mypage").close(); // close the window 

Je ne pense pas que ce soit terriblement productif, car vous ne pouvez toujours pas le focaliser de manière fiable, mais peut-être que cela correspond à vos besoins.

+0

"refWin.focus();" (windows) ne fait que clignoter la fenêtre, mais ne force pas la mise au point, si elle est ouverte –

+0

Hmm. Je me demande si cela a à voir avec les paramètres de Windows.Sur ma machine, cela fait gagner de la place à la fenêtre (Windows XP SP3) Y a-t-il une raison pour laquelle vous ne pouvez pas appeler à nouveau window.open()? Voir les modifications. –