537 votes

target="_blank" vs. target="_new"

Quelle est la différence entre <a target="_new"> y <a target="_blank"> Et lequel dois-je utiliser si je veux juste ouvrir un lien dans un nouvel onglet ou une nouvelle fenêtre ?

80 votes

Résumé des réponses actuelles : _new n'a pas de signification particulière. Vous pourriez écrire _white_little_lamb également.

10 votes

@x3ro En quoi cela rend-il erroné le fait de dire que " _new "n'a pas de signification particulière ?

3 votes

@ÁlvaroG.Vicario Je faisais référence à "Vous pourriez écrire ... à la place". Mais en y réfléchissant, je dirais que "n'a pas de signification particulière" n'est pas la même chose que "est explicitement déconseillé", mais c'est peut-être moi qui pinaille ;)

676voto

x3ro Points 12721

Utiliser "_blank"

Selon la Spécification HTML5 :

A nom de contexte de navigation valide est toute chaîne comportant au moins un caractère qui ne commence pas par un caractère U+005F LOW LINE. (Les noms commençant par un trait de soulignement sont réservés aux mots-clés spéciaux).

A nom ou mot-clé valide du contexte de navigation est une chaîne qui est soit un nom de contexte de navigation valide, soit une correspondance ASCII insensible à la casse pour l'un des éléments suivants : _blank, _self, _parent, ou _top." - Source

Cela signifie qu'il n'existe pas de mot-clé tel que _new en HTML5, et pas non plus dans HTML4 (et par conséquent XHTML) . Cela signifie qu'il n'y aura aucun comportement cohérent si vous utilisez cette valeur pour l'attribut target.

Recommandation de sécurité

Comme Daniel et Michael l'ont souligné dans les commentaires, lorsque l'on utilise la cible _blank pointant vers un site web non fiable, vous devez, en outre, paramétrer rel="noopener" . Cela empêche le site d'ouverture d'interférer avec l'ouvreur par le biais de JavaScript. Voir aussi ce poste pour plus d'informations.

7 votes

Si l'on ne tient pas compte du texte en gras de la spécification, cette citation paraît confusément circulaire. Je la lis comme suit : "Un valid browsing context name ou un mot-clé est une chaîne de caractères qui est soit un valid browsing context name ou ...."

0 votes

Je suppose que vous avez raison. Mais j'ai cru comprendre que nom du contexte de navigation renvoie aux noms des cadres, etc.

6 votes

@lyoshenka, @x3ro : J'ai pris la liberté d'ajouter le paragraphe précédent à la citation. Cela devrait dissiper la confusion.

135voto

Abhi Beckert Points 10768

Utilisation target="_blank" demande au navigateur de créer un nouvel onglet ou une nouvelle fenêtre lorsque l'utilisateur clique sur le lien.

Utilisation target="_new" est techniquement invalide selon les spécifications, mais pour autant que je sache, tous les navigateurs se comporteront de la même manière :

  • il recherchera un onglet ou une fenêtre avec le nom de contexte "_new"
  • si un onglet/une fenêtre "_new" est trouvé(e), l'URL est chargé(e) dans cet onglet/cette fenêtre
  • s'il n'est pas trouvé, un nouvel onglet/une nouvelle fenêtre est créé(e) avec le nom de contexte "_new", et l'URL y est chargé(e)

Nota target="_new" se comportera exactement de la même manière que target="new" et le second est un HTML valide tandis que le premier est un HTML invalide.

Pour ajouter à la confusion, en HTML4, l'élément target a été supprimé. En HTML5, cette décision a été annulée et l'attribut fait à nouveau officiellement partie de la spécification. Tous les navigateurs supportent l'attribut target quelle que soit la version du HTML que vous utilisez, mais certains validateurs signaleront l'utilisation comme dépréciée si votre doctype est HTML4.

4 votes

Donc, en gros, si j'ai deux (ou plus) liens avec target="_new" Les deux s'ouvriront dans le même onglet, l'un écrasant l'autre ?

5 votes

@art-solopov pour autant que je sache, oui c'est ce qui se passera dans tous les navigateurs. Cependant, "_new" est une valeur illégale pour une cible, alors ne le faites pas.

15voto

corroded Points 9116

Cette question a peut-être déjà été posée, mais.. :

"chaque lien qui spécifie target="_new" recherche et trouve cette fenêtre par son nom, et s'ouvre dans celle-ci.

Si vous utilisez target="_blank", une toute nouvelle fenêtre sera créée à chaque fois, au-dessus de la fenêtre actuelle".

à partir d'ici : http://thedesignspace.net/MT2archives/000316.html

13voto

the Hampster Points 445

J'ai cru comprendre que target = whatever recherchera un cadre/fenêtre portant ce nom. S'il n'en trouve pas, il ouvrira une nouvelle fenêtre portant ce nom. Si le nom de la fenêtre n'est pas trouvé, il ouvrira une nouvelle fenêtre avec ce nom. whatever == "_new" il apparaîtra comme si vous aviez utilisé _blank sauf.....

L'utilisation d'un des noms de cible réservés permet d'éviter la phase de "recherche". Ainsi, l'utilisation d'un nom de cible réservé permet de contourner la phase de "recherche", target = "_blank" sur une douzaine de liens ouvrira une douzaine de fenêtres vierges. target = whatever sur une douzaine de liens n'ouvrira qu'une seule fenêtre. target = "_new" sur une douzaine de liens peut donner un comportement inconstant. Je n'ai pas essayé sur plusieurs navigateurs, mais cela ne devrait ouvrir qu'une seule fenêtre.

C'est du moins ainsi que j'interprète les règles.

10voto

cnd Points 94

Attention - n'oubliez pas de toujours inclure les "guillemets" - du moins sur Chrome, target=_blank (sans guillemets) n'est pas la même chose que target="_blank" (avec citations).

Ce dernier ouvre chaque lien dans un nouvel onglet ou une nouvelle fenêtre. Le premier (guillemets manquants) ouvre le premier lien sur lequel vous cliquez dans un nouvel onglet/fenêtre, puis écrase ce même onglet/fenêtre avec chaque lien suivant sur lequel vous cliquez (qui est également nommé avec les guillemets manquants).

0 votes

Très bonne remarque. J'ai rencontré ce problème lorsque je n'ai pas mis le _blank entre guillemets. Le lien sur lequel je cliquais à partir de mon onglet "vide" nouvellement créé écrivait le contenu à l'intérieur de cet onglet au lieu d'ouvrir un nouvel onglet. Le fait de mettre le _blank entre guillemets oblige chrome à ouvrir un nouvel onglet à chaque fois.

0 votes

Veillez également à utiliser "_blank" et non "_BLANK". Chrome est en effet très pointilleux sur la casse et n'ouvrira pas un nouvel onglet en utilisant "_BLANK" plusieurs fois.

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