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)
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
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 ?
1 votes
À moins, bien sûr, que vous ne développiez un addon pour Firefox, ou que vous n'utilisiez XULRunner pour développer un client : developer.mozilla.org/fr/Code_snippets/Tabbed_browser NOTE : Ces techniques ne fonctionnent que pour les clients qui ont un certain degré d'accès au navigateur sous-jacent, et non à la fenêtre que l'on trouve dans les pages HTTP normales.
1 votes
Existe-t-il un moyen de demander au navigateur d'ouvrir un nouvel onglet vide, puis de contrôler son emplacement ?
1 votes
@Mark F - Pour répondre à votre question sur l'ouverture des liens dans les onglets, essayez de tothepc.com/archives/ .
1 votes
Il est probablement à la fois bon et mauvais que la quasi-totalité d'entre eux soient la proie des bloqueurs de fenêtres pop-up. Ce serait bien si je pouvais faire en sorte que l'utilisateur clique sur "OK" ou quelque chose du genre et que la page s'affiche ensuite.
11 votes
Gmail fait cela d'une manière ou d'une autre, du moins dans Chrome. Shift+clic sur une ligne d'e-mail et vous ouvrez cet e-mail dans une nouvelle fenêtre. Ctrl+clic et vous l'ouvrez dans un nouvel onglet. Seul problème : creuser dans le code obfusqué de Gmail est un PITA.
53 votes
@Sergio, c'est le comportement par défaut du navigateur pour tout lien. (Pour Chrome et Firefox au moins.) Cela n'a rien à voir avec Gmail.
1 votes
Peut être dû aux paramètres du navigateur, mais pour moi
window.open(url);
Je l'ai ouvert dans un nouvel onglet de chrome et de firefox.1 votes
Quora.com le fait en cliquant sur le lien d'une nouvelle question. quel que soit l'endroit où vous êtes, la fenêtre s'ouvre dans un nouvel onglet et non dans une nouvelle fenêtre. Il utilise également un <a tag> pour le faire.
3 votes
@SangramSingh, ce n'est pas une fonction de javascript. Quora définit simplement l'attribut cible des balises d'ancrage à "_blank". Si vous décochez, par exemple, l'option "Ouvrir les nouvelles fenêtres dans un nouvel onglet" de Firefox, ces liens ouvriront de nouvelles fenêtres plutôt que des onglets.
1 votes
@Qtaxe : Si Shift+Clic et Ctrl+Clic ouvrir de nouvelles fenêtres différemment (selon les préférences de l'utilisateur), pourriez-vous déclencher une pression de la touche en JS pour simuler une telle frappe, et ainsi ouvrir un nouvel onglet (ou une nouvelle fenêtre) de cette manière ?
1 votes
@DavidRTribble Non. Vous ne peut même pas faire un "vrai clic" sur une
<a>
avec JS.1 votes
Chrome une solution spécifique (un sale coup, cependant) :
window.open("https://www.google.co.kr/_/chrome/newtab?ie=UTF-8")
.1 votes
Une alternative : En HTML ->
<button onClick="clickLink('#link')">Open Your Domain On New Tab</button> <a id="link" href="https://yourdomain.com" target="_blank" hidden></a>
En Javascript ->function clickLink(id) { document.getElementById(id).click(); }