web-dev-qa-db-fra.com

Ouvrir le lien dans une nouvelle fenêtre ou se concentrer sur celui-ci s'il est déjà ouvert

J'ai un lien qui devrait s'ouvrir dans un nouvel onglet, mais si l'onglet est déjà ouvert, passez-le simplement. J'ai essayé avec javascript, wnd = window.open () et que wnd.focus (), cela fonctionne dans Chrome 19, mais pas dans FF 13 ou IE 9.. J'ai écris :

<script type="text/javascript">
var loadingTableWnd;
function openOrSwitchToWindow(url){
if(loadingTableWnd == undefined)
loadingTableWnd = window.open(url,'myFrame');
else
loadingTableWnd.focus();
}
</script> 
<a href='javascript:openOrSwitchToWindow("/");' >Loading Table</a>

Toute idée de comment puis-je ouvrir ou passer de tous les navigateurs?

EDIT: Je dois ouvrir le lien dans un nouvel onglet, pas dans une fenêtre autonome.

23
jaraics

Différents navigateurs se comportent différemment pour window.open () et focus () . Pour ce code window.open('www.sample.com','mywindow').focus()

  • Chrome 20 ouvre un nouvel onglet et se concentre sur les appels open () subséquents, que focus () soit appelé ou non.
  • Firefox 13 ouvre un nouvel onglet, se concentre sur le premier open (), ne se concentre pas sur les appels ultérieurs à open ()/ignore le focus ().
  • IE 8 ouvre une nouvelle fenêtre, honore focus ().
  • Safari 5 ouvre une nouvelle fenêtre et se concentre sur les appels open () subséquents, que focus () soit appelé ou non.

Violon à tester avec: http://jsfiddle.net/jaraics/pEG3j/

33
jaraics

Vous ne devriez pas avoir besoin de logique pour quelque chose comme ça. Par défaut, la spécification du deuxième paramètre pour window.open() donne à la fenêtre un "nom", que le navigateur se souvient. Si vous essayez d'appeler window.open() avec le même nom (après l'avoir déjà ouvert), la nouvelle fenêtre ne s'ouvre pas ... mais vous devrez peut-être quand même appeler .focus(). Essaye ça:

var a = window.open(url, "name");
a.focus();

Celles-ci devraient être les seules lignes de code de votre fonction, et vous n'avez pas besoin de la variable loadingTableWnd ...

8
Ian

Si la fenêtre est déjà ouverte et si vous voulez vous concentrer sur cette fenêtre, vous pouvez utiliser 

window.open('', 'NameOfTheOpenedWindow').focus();
2
dileepar

window.focus() est largement pris en charge - http://www.w3schools.com/jsref/met_win_focus.asp et semble fonctionner correctement à la fois dans Internet Explorer et Firefox, le problème devrait être dans votre code. J'ai créé un simple jsFiddle à tester - http://jsfiddle.net/Pharaon/uJy5t/

1
Sergey Rybalkin

Si vous ne souhaitez pas conserver l'état d'un onglet précédemment ouvert, vous pouvez procéder comme suit:

var loadingTableWnd;
function openOrSwitchToWindow(url) {
    if (loadingTableWnd != undefined) {
        loadingTableWnd.close();
    }
    loadingTableWnd = window.open(url,'myFrame');
}
0
MarkZ