400 votes

JavaScript s'ouvre dans une nouvelle fenêtre, pas dans un onglet

J'ai une boîte de sélection qui appelle window.open(url) lorsqu'un élément est sélectionné. Firefox ouvrira la page dans un nouvel onglet par défaut. Cependant, je voudrais que la page s'ouvre dans une nouvelle fenêtre, et non dans un nouvel onglet.

Comment puis-je y parvenir ?

3 votes

Voir l'exemple à " jsfiddle.net/HLbLu

1 votes

0 votes

Vous pouvez utiliser github.com/reduardo7/xpopup

504voto

DNS Points 17577

Spécifier les "caractéristiques" de la fenêtre au open appeler :

window.open(url, windowName, "height=200,width=200");

Lorsque vous spécifiez une largeur/hauteur, elle s'ouvre dans une nouvelle fenêtre au lieu d'un onglet.

Voir https://developer.mozilla.org/en-US/docs/Web/API/Window.open#Position_and_size_features pour toutes les caractéristiques possibles.

5 votes

Bonne astuce. Je pense qu'Opera l'ouvrira quand même dans un onglet :).

2 votes

Il ne semble pas que cela fonctionne dans FF ou Chrome (versions bêta des deux cependant, je ne sais pas quel est le comportement des versions non bêta).

0 votes

Cela devrait fonctionner dans Firefox (j'ai vérifié avant de poster) ; je n'ai pas essayé Chrome. Et oui, ce n'est en aucun cas une solution multi-navigateurs solide ; la situation est assez confuse.

126voto

nwbrad Points 529

Vous n'avez pas besoin d'utiliser la hauteur, assurez-vous simplement d'utiliser _blank Sans cela, il s'ouvre dans un nouvel onglet.

Pour une fenêtre vide :

window.open('', '_blank', 'toolbar=0,location=0,menubar=0');

Pour une URL spécifique :

window.open('http://www.google.com', '_blank', 'toolbar=0,location=0,menubar=0');

4 votes

Mais que faire si je veux lui donner un nom aussi ?

1 votes

Au moins dans Chrome, location=0 est nécessaire lorsque le JS est invoqué à partir d'un bouton ou d'un élément d'ancrage.

1 votes

Cela a parfaitement fonctionné. J'ai dû inclure location=0 également dans firefox.

90voto

Jordan S. Jones Points 7724

Je peux me tromper, mais d'après ce que j'ai compris, cela est contrôlé par les préférences du navigateur de l'utilisateur, et je ne pense pas que cela puisse être remplacé.

1 votes

Vous avez raison, l'utilisateur peut définir la préférence "about:config" "browser.tabs.opentabfor.windowopen" à true, mais il s'agit d'un paramètre global et je ne veux pas changer le comportement global des navigateurs de nos utilisateurs ;)

50 votes

Je t'ai dit que j'avais un code qui marche. J'ai tapé ceci dans la console de firebug : window.open("", "poop", "height=200,width=200,modal=yes,alwaysRaised=yes") ; et devinez quoi ? ça marche !!!!!!

25 votes

Oui, cela fonctionne, mais cela semble être un peu un hack. Firefox est écrit de telle manière que l'ouverture d'une nouvelle fenêtre ou d'un nouvel onglet est une préférence du navigateur, et non une préférence javascript. Il est donc possible que votre suggestion ne fonctionne pas de la même manière dans une version ultérieure de Firefox. Je préfère ne pas me fier à un hack.

17voto

Essayez :

window.open("", [window name], "height=XXX,width=XXX,modal=yes,alwaysRaised=yes");

J'ai du code qui fait ce que vous dites, mais il y a beaucoup de paramètres dedans. Je pense que ceux-ci sont le strict minimum, faites-moi savoir si cela ne fonctionne pas, je posterai le reste.

12voto

Peter Points 535

OK, après avoir fait beaucoup de tests, voici ma conclusion :

Quand vous vous produisez :

     window.open('www.yourdomain.tld','_blank');
     window.open('www.yourdomain.tld','myWindow');

ou ce que vous mettez dans le champ de destination, cela ne changera rien : la nouvelle page sera ouverte dans un nouvel onglet (cela dépend donc des préférences de l'utilisateur).

Si vous voulez que la page s'ouvre dans une nouvelle fenêtre "réelle", vous devez ajouter un paramètre supplémentaire. Par exemple :

window.open('www.yourdomain.tld', 'mywindow','location=1,status=1,scrollbars=1, resizable=1, directories=1, toolbar=1, titlebar=1');

Après avoir testé, il semble que le paramètre supplémentaire que vous utilisez n'a pas vraiment d'importance : ce n'est pas le fait que vous mettiez "ce paramètre" ou "cet autre" qui crée la nouvelle "vraie fenêtre" mais le fait qu'il y ait un ou plusieurs nouveaux paramètres.

Mais quelque chose est confus et peut expliquer beaucoup de mauvaises réponses :

Ceci :

 win1 = window.open('myurl1', 'ID_WIN');
 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');

Et ceci :

 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
 win1 = window.open('myurl1', 'ID_WIN');

ne donnera PAS le même résultat.

Dans le premier cas, lorsque vous ouvrez pour la première fois une page sans paramètre supplémentaire, il s'ouvrira dans une nouvelle onglet . Et dans ce cas, le deuxième appel sera également ouvert dans ce onglet à cause du nom que vous donnez.

Dans le deuxième cas, comme votre premier appel est fait avec la page s'ouvrira dans un nouveau fichier " véritable fenêtre ". Et dans ce cas, même si le deuxième appel est effectué sans le paramètre supplémentaire, il sera également ouvert dans ce nouveau " véritable fenêtre "... mais même onglet !

Cela signifie que le premier appel est important car il décide où placer la page.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X