2520 votes

Ouvrir une URL dans un nouvel onglet (et non dans une nouvelle fenêtre)

J'essaie d'ouvrir un URL dans un nouvel onglet, par opposition à une fenêtre popup.

J'ai vu des questions connexes où les réponses ressemblaient à quelque chose comme :

window.open(url,'_blank');
window.open(url);

Mais aucune d'entre elles n'a fonctionné pour moi, le navigateur essayait toujours d'ouvrir une fenêtre popup.

92 votes

C'est généralement une question de préférence. Certaines personnes aiment Windows (et protègent farouchement ce comportement), d'autres les onglets (et protègent farouchement ce comportement). Ainsi, vous feriez échouer un comportement qui est généralement considéré comme une question de goût, et non de conception.

48 votes

Javascript ne sait rien de votre navigateur et des onglets par rapport à Windows. C'est donc au navigateur de décider comment ouvrir une nouvelle fenêtre.

6 votes

Comment puis-je configurer Chrome pour qu'il l'affiche dans un nouvel onglet, plutôt que dans une fenêtre contextuelle ?

2153voto

duke Points 5226

C'est une astuce,

function openInNewTab(url) {
 window.open(url, '_blank').focus();
}

//or just
window.open(url, '_blank').focus();

Dans la plupart des cas, cela devrait se faire directement dans la section onclick pour le lien afin d'éviter les bloqueurs de fenêtres pop-up, et le comportement par défaut "nouvelle fenêtre". Vous pouvez le faire de cette manière, ou en ajoutant un écouteur d'événements à votre fichier DOM objet.

<div onclick="openInNewTab('www.test.com');">Something To Click On</div>

http://www.tutsplanet.com/open-url-new-tab-using-javascript/

129 votes

Ne fonctionne pas. J'ai un message à droite de la barre d'adresse : Popup bloquée . Puis j'ai autorisé les popups. Et voilà, ça s'ouvre dans une popup, pas une onglet ! Chrome 22.0.1229.94 sur OS X Lion.

46 votes

@b1naryatr0phy C'est parce que vous ne l'avez pas testé correctement. Modifiez les paramètres de vos navigateurs. L'ouverture dans un onglet ou une fenêtre est déterminée par les paramètres de votre navigateur. Il n'y a rien que vous puissiez faire en appelant window.open (ou tout autre Javascript) pour choisir comment ouvrir la nouvelle fenêtre/onglet.

0 votes

Question : J'ai défini une url sans protocole (par exemple my.site.com/Controller/Index). Le résultat est que j'obtiens une nouvelle fenêtre (onglet) avec un url tel que l'url de la page courante (d'où j'utilise la fonction OpenInNewTab) plus celui passé dans la fonction url. Avec le protocole la fenêtre s'ouvre par le lien correct. Pourquoi ?

1085voto

Quentin Points 325526

Un auteur ne peut rien faire pour choisir d'ouvrir dans un nouvel onglet au lieu d'une nouvelle fenêtre ; il s'agit d'une préférence des utilisateurs . (Notez que la préférence par défaut de l'utilisateur dans la plupart des navigateurs est pour les nouveaux onglets, donc un test trivial sur un navigateur où cette préférence n'a pas été modifiée ne le démontrera pas).

CSS3 proposé cible-nouvelle mais la spécification a été abandonnée .

Le site inverser n'est pas vrai ; en spécifiant certaines caractéristiques de la fenêtre dans le troisième argument de la commande window.open() vous pouvez déclencher une nouvelle fenêtre lorsque la préférence va aux onglets.

3 votes

Comment se fait-il que ce soit la réponse acceptée ? J'ai testé les réponses données ci-dessous par Duke et arikfr et elles fonctionnent parfaitement bien dans FF, Chrome et Opera, à l'exception d'IE (où elles ne fonctionnent pas) et Safari (où elles s'ouvrent dans une nouvelle fenêtre au lieu d'un nouvel onglet).

48 votes

@AliHaideri Le Javascript n'a rien à voir avec la façon dont le nouvel onglet/fenêtre est ouvert. Tout est déterminé par les paramètres de votre navigateur. Utilisation de window.open indique au navigateur d'ouvrir quelque chose de nouveau, puis le navigateur ouvre ce qui a été choisi dans ses paramètres - onglet ou fenêtre. Dans les navigateurs que vous avez testés, modifiez les paramètres pour ouvrir une nouvelle fenêtre au lieu d'un onglet et vous verrez que les solutions des autres sont fausses.

0 votes

Et si je veux juste le contrôler sur mon propre navigateur ? Chrome continue d'ouvrir des popups pour window.open(), sauf si j'utilise la solution de Venkat. Maintenir la touche Ctrl enfoncée lorsque je clique sur le bouton fonctionne également.

415voto

Venkat Kotra Points 2697

window.open() ne s'ouvrira pas dans un nouvel onglet si cela ne se produit pas lors de l'événement de clic réel. Dans l'exemple donné, l'URL s'ouvre au moment du clic. Cela fonctionnera si l'utilisateur dispose des paramètres appropriés dans le navigateur. .

<a class="link">Link</a>
<script  type="text/javascript">
     $("a.link").on("click",function(){
         window.open('www.yourdomain.com','_blank');
     });
</script>

De même, si vous essayez d'effectuer un appel Ajax dans la fonction de clic et que vous voulez ouvrir une fenêtre en cas de succès, assurez-vous que vous effectuez l'appel Ajax avec la fonction async : false l'option choisie.

31 votes

Ce serait bien de marquer celle-ci comme étant la réponse CORRECTE. Mes tests avec Chrome v26 (Windows) confirment que si le code se trouve dans le gestionnaire de clic d'un bouton, il ouvre un nouvel onglet et que si le code est invoqué de manière programmatique, par exemple à partir de la console, il ouvre une nouvelle fenêtre.

2 votes

D'après mes tests sur des navigateurs avec des paramètres par défaut, cette réponse fonctionne dans les cas où les réponses ci-dessus ne fonctionnent pas. La réponse acceptée qui dit "vous ne pouvez rien faire" n'est vraie que lorsque l'utilisateur a modifié les paramètres par défaut.

0 votes

@Ian Pour des raisons de clarté, j'ai mentionné ceci dans la réponse à l'avertissement sur les paramètres de l'utilisateur. "Cela fonctionnera à condition que l'utilisateur ait des paramètres appropriés dans le navigateur." Je pense que la majorité des utilisateurs ne modifient pas les paramètres du navigateur et que cette réponse fonctionne pour la majorité d'entre eux.

262voto

Cupcake Points 22154

window.open Impossible d'ouvrir de manière fiable les popups dans un nouvel onglet dans tous les navigateurs

Les différents navigateurs mettent en œuvre le comportement de window.open de différentes manières, notamment en fonction des préférences du navigateur de l'utilisateur. Vous ne pouvez pas attendre le même comportement pour window.open de s'appliquer à l'ensemble d'Internet Explorer, de Firefox et de Chrome, en raison des différentes manières dont ils gèrent les préférences de navigation d'un utilisateur.

Par exemple, les utilisateurs d'Internet Explorer (11) peuvent choisir d'ouvrir les popups dans une nouvelle fenêtre ou un nouvel onglet, vous ne pouvez pas forcer les utilisateurs d'Internet Explorer 11 à ouvrir les popups d'une certaine manière par le biais de window.open comme indiqué dans La réponse de Quentin .

Quant aux utilisateurs de Firefox (29), ils peuvent utiliser window.open(url, '_blank') dépend des préférences d'onglet de leur navigateur, mais vous pouvez toujours les obliger à ouvrir les fenêtres pop-up dans une nouvelle fenêtre en spécifiant une largeur et une hauteur (voir la section "Et Chrome ?" ci-dessous).

Démonstration

Allez dans les paramètres de votre navigateur et configurez-le pour qu'il ouvre les popups dans une nouvelle fenêtre.

Internet Explorer (11)

Internet Explorer settings dialog 1

Internet Explorer tab settings dialog

Page de test

Après avoir configuré Internet Explorer (11) pour qu'il ouvre les fenêtres pop-up dans une nouvelle fenêtre, comme indiqué ci-dessus, utilisez la page de test suivante pour vérifier que les fenêtres pop-up sont bien ouvertes. window.open :

<!DOCTYPE html>
<html>
  <head>
    <title>Test</title>
  </head>

  <body>
    <button onclick="window.open('https://stackoverflow.com/q/4907843/456814');">
      <code>window.open(url)</code>
    </button>
    <button onclick="window.open('https://stackoverflow.com/q/4907843/456814', '_blank');">
      <code>window.open(url, '_blank')</code>
    </button>
  </body>
</html>

Observez que les popups sont ouvertes dans une nouvelle fenêtre, pas dans un nouvel onglet.

Vous pouvez également tester les extraits ci-dessus dans Firefox (29) avec les préférences d'onglet définies sur les nouvelles fenêtres, et obtenir les mêmes résultats.

Qu'en est-il de Chrome ? Il met en œuvre window.open Différent d'Internet Explorer (11) et de Firefox (29).

Je ne suis pas sûr à 100%, mais il semble que Chrome (version 34.0.1847.131 m ) ne semble pas disposer de paramètres permettant à l'utilisateur de choisir d'ouvrir ou non les fenêtres pop-up dans une nouvelle fenêtre ou un nouvel onglet (comme c'est le cas pour Firefox et Internet Explorer). J'ai vérifié la documentation de Chrome sur la gestion des fenêtres pop-up mais il ne mentionne rien à propos de ce genre de choses.

Aussi, une fois de plus, les différents navigateurs semblent mettre en œuvre le comportement de window.open différemment. Dans Chrome et Firefox, En spécifiant une largeur et une hauteur, vous forcerez l'apparition d'une fenêtre contextuelle, même lorsque l'utilisateur a configuré Firefox (29) pour qu'il ouvre les nouvelles fenêtres dans un nouvel onglet (comme indiqué dans les réponses aux questions suivantes). JavaScript s'ouvre dans une nouvelle fenêtre, pas dans un onglet ) :

<!DOCTYPE html>
<html>
  <head>
    <title>Test</title>
  </head>

  <body>
    <button onclick="window.open('https://stackoverflow.com/q/4907843/456814', 'test', 'width=400, height=400');">
      <code>window.open(url)</code>
    </button>
  </body>
</html>

Cependant, le même extrait de code ci-dessus ouvrira toujours un nouvel onglet dans Internet Explorer 11 si les utilisateurs définissent les onglets dans leurs préférences de navigation, même en ne spécifiant pas de largeur et de hauteur, une nouvelle fenêtre popup s'ouvrira pour eux.

Donc le comportement de window.open dans Chrome semble être d'ouvrir les fenêtres pop-up dans un nouvel onglet lorsqu'elles sont utilisées dans une onclick pour les ouvrir dans une nouvelle fenêtre lorsqu'ils sont utilisés à partir de la console du navigateur ( comme l'ont noté d'autres personnes ), et de les ouvrir dans de nouvelles fenêtres lorsqu'elles sont spécifiées avec une largeur et une hauteur.

Résumé

Les différents navigateurs mettent en œuvre le comportement de window.open différemment en fonction des préférences du navigateur de l'utilisateur. Vous ne pouvez pas attendre le même comportement pour window.open de s'appliquer à l'ensemble d'Internet Explorer, de Firefox et de Chrome, en raison des différentes manières dont ils gèrent les préférences de navigation d'un utilisateur.

Lectures complémentaires

25 votes

Vous n'avez pas répondu à la question, vous avez juste prouvé que window.open est incohérent.

0 votes

Veuillez fournir une solution, cette "réponse" demande une solution.

73voto

arikfr Points 1918

Pour développer la réponse de Steven Spielberg, j'ai fait cela dans un tel cas :

$('a').click(function() {
  $(this).attr('target', '_blank');
});

De cette façon, juste avant que le navigateur ne suive le lien, je définis l'attribut target, de sorte que le lien s'ouvrira dans un nouvel onglet ou une nouvelle fenêtre ( dépend des paramètres de l'utilisateur ).

Un exemple d'une ligne en jQuery :

$('a').attr('target', '_blank').get(0).click();
// The `.get(0)` must be there to return the actual DOM element.
// Doing `.click()` on the jQuery object for it did not work.

Cela peut également être accompli en utilisant simplement les API DOM natives du navigateur :

document.querySelector('a').setAttribute('target', '_blank');
document.querySelector('a').click();

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