цель = «_ пусто» против цели = «_ новое»

512

Какая разница между <a target="_new">и <a target="_blank">что я должен использовать, если я просто хочу открыть ссылку в новой вкладке / окне?

Алекс Грин
источник
73
Краткое содержание текущих ответов: _newне имеет особого значения. Вы могли бы написать _white_little_lambтакже.
Альваро Гонсалес
10
@ x3ro Как это неправильно говорить, что " _new" не имеет особого значения?
Альваро Гонсалес
3
@ ÁlvaroG.Vicario Я имел в виду «Вы могли бы написать ... вместо этого». Но, думая об этом, я бы сказал, что «не имеет особого значения» - это не то же самое, что «явно обескуражен», но это может меня придирать;)
fresskoma
5
Я хотел бы напомнить всем, что использование target="_blank"без rel="noopener"является потенциальной уязвимостью безопасности. Ищите, rel="noopener"чтобы узнать больше.
Flimm

Ответы:

651

Используйте "_blank"

Согласно спецификации HTML5 :

Допустимое имя контекста просмотра любая строка, по крайней мере один символ , который не начинается с символа U + 005F LOW LINE. (Имена, начинающиеся с подчеркивания, зарезервированы для специальных ключевых слов.)

Допустимое имя контекста просмотра или ключевое слово является любая строка, либо действительное имя контекста просмотра или что является ASCII регистронезависимым матч одного из: _blank, _self, _parent или _top «. - Источник

Это означает, что такого ключевого слова нет, как _newв HTML5, так и в HTML4 (и, следовательно, XHTML) . Это означает, что не будет никакого последовательного поведения, если вы будете использовать это как значение для целевого атрибута.

Рекомендация по безопасности

Как отметили Даниэль и Майкл в комментариях, при использовании цели, _blankуказывающей на ненадежный веб-сайт, вы должны, кроме того, установить rel="noopener". Это препятствует тому, чтобы открывающий сайт связывался с новичком через JavaScript. Смотрите этот пост для получения дополнительной информации.

fresskoma
источник
7
Исключение выделенного текста из спецификации делает эту цитату звучащей до смешного круглой. Я читаю это как «A valid browsing context nameили ключевое слово - любая строка, которая является valid browsing context nameили ...»
Алекс Грин
6
@lyoshenka, @ x3ro: Я позволил себе добавить предыдущий абзац в цитату. Это должно прояснить путаницу.
Mercator
5
@aesede: прочитайте спецификацию Они недопустимы , потому что «my_custom_name» не может иметь префикс с подчеркиванием. Таким образом, "новый" будет хорошо, но "_new" нет!
фресскома
7
В целях
Даниэль Ф,
6
Пожалуйста , обратите внимание , добавив , что люди должны также добавить rel="noopener noreferrer"вследствие яваскрипта атаки уязвимости изtarget="_blank"
Michael
126

Использование target="_blank"будет инструктировать браузер создавать новую вкладку или окно браузера, когда пользователь нажимает на ссылку.

Использование target="_new"технически недопустимо в соответствии со спецификациями, но, насколько я знаю, каждый браузер будет вести себя одинаково:

  • он будет искать вкладку или окно с именем контекста "_new"
  • если вкладка / окно "_new" найдена, то в нее загружается URL
  • если он не найден, создается новая вкладка / окно с именем контекста "_new" и загружаемым в него URL

Примечание target="_new"будет вести себя точно так же, как target="new"и последний, действительный HTML, тогда как первый является недействительным HTML.

Добавляя некоторую путаницу к этому, в HTML4 targetатрибут устарел. В HTML5 это решение было отменено, и оно снова стало официальной частью спецификации. Все браузеры поддерживают targetнезависимо от того, какую версию HTML вы используете, но некоторые валидаторы помечают использование как устаревшее, если ваш тип документа - HTML4.

Абхи Беккерт
источник
4
Так что, в принципе, если у меня есть две (или более) ссылки target="_new", они обе откроются в одной вкладке, одна перезаписывает другую?
арт-солопов
4
@ Арт-Солопов, насколько я знаю, да, это то, что будет происходить в каждом браузере. Однако «_new» является недопустимым значением для цели, поэтому не делайте этого.
Абхи Беккерт,
25

TL; DR
USE _blank

Атрибут target указывает, где открыть связанный документ.

USAGE: target="xyz"  [don't forget double quotes]

_blank  Opens the linked document in a new window or tab
_self   Opens the linked document in the same frame as it was clicked (this is default)
_parent     Opens the linked document in the parent frame
_top    Opens the linked document in the full body of the window 
framename   Opens the linked document in a named frame

Поскольку "_new" не является ни одним из этих, ОНО БУДЕТ ПОД "framename", поэтому, если пользователь повторно щелкнет по этой гиперссылке, он не откроет новую вкладку, а обновит существующую вкладку. Тогда как в _blank, если пользователь нажимает дважды, открываются 2 новые вкладки.

abe312
источник
21

Я знаю, что это старый вопрос, и правильный ответ, использование _blank, уже упоминался несколько раз, но использование <a target="somesite.com" target="_blank">Link</a> - это угроза безопасности .

Он рекомендуется ( выигрыш в производительности ) для использования:

<a href="somesite.com" target="_blank" rel="noopener noreferrer">Link</a>
Михал Фристаки
источник
1
Просто некоторые дополнительные чтения на аспекте угрозы безопасности: jitbit.com/alexblog/...
8bithero
14

Это, возможно, спросили раньше, но:

"каждая ссылка, которая указывает target =" _ new "ищет и находит это окно по имени и открывает в нем.

Если вы используете target = "_ blank", новое окно будет создаваться каждый раз поверх текущего окна. "

отсюда: http://thedesignspace.net/MT2archives/000316.html

коррозия
источник
12

target="_blank" открывает новую вкладку в большинстве браузеров.

Abudayah
источник
12

я понимаю, что target = whateverбуду искать рамку / окно с таким именем. Если он не найден, откроется новое окно с таким именем. Если whatever == "_new", это будет выглядеть так же, как если бы вы использовали, _blankкроме .....

Использование одного из зарезервированных имен цели обойдёт фазу «просмотра». Таким образом, target = "_blank"на дюжине ссылок откроется дюжина пустых окон, а target = whateverна дюжине ссылок откроется только одно окно. target = "_new"на десяток ссылок может дать непоследовательное поведение. Я не пробовал это на нескольких браузерах, но должен открыть только одно окно.

По крайней мере, так я интерпретирую правила.

Хэмпстер
источник
9

Осторожно - не забывайте всегда включать «кавычки» - по крайней мере, в Chrome target=_blank(без кавычек) НЕ ТО ЖЕ, как target="_blank"(с кавычками).

Последний открывает каждую ссылку в новой вкладке / окне. Первая (пропущенные кавычки) открывает первую ссылку, по которой вы щелкаете в одной новой вкладке / окне, затем перезаписывает эту же вкладку / окно при каждой последующей щелчке по ссылке (которая также называется отсутствующими кавычками).

CND
источник
Очень хороший момент. Я столкнулся с этой проблемой, когда я не заключил _blank в кавычки. Ссылка, по которой я щелкал на только что созданной «пустой» вкладке, заключалась в том, что она переписывала содержимое этой вкладки, а не открывала новую. Заключение в кавычки _blank заставляет chrome каждый раз открывать новую вкладку.
Стив Шерер
Также убедитесь, что вы используете «_blank», а не «_BLANK». Chrome на самом деле суетлив и не открывает новую вкладку, используя "_BLANK" несколько раз.
Стив Шерер
5
  • _blank в качестве целевого значения будет порождать новое окно каждый раз,
  • _new будет вызывать только одно новое окно.

Кроме того, каждая ссылка, щелкнувшая с целевым значением _new, заменит страницу, загруженную в ранее появившемся окне.

Вы можете нажать здесь, когда использовать _blank или _new, чтобы попробовать сами.

Джеймс Дринкард
источник
Можете ли вы перечислить, какие браузеры уважают, _newкак описано?
Дима Тиснек
@qarma Это поведение, как описано во всех браузерах, о которых я знаю, _newэто не волшебное ключевое слово, это просто имя, если окно с таким именем существует, оно будет использовать его повторно, иначе оно откроет его. Нажав несколько ссылок для этого окна, вы просто откроете разные страницы в названном окне, а не откроете несколько новых страниц.
Scragar
Спецификация фактически предлагает браузерам, что они ignoreпредназначаются, который начинается с подчеркивания, но не являются ключевыми словами. Нет предложений о том, что должен делать браузер, когда он «игнорирует» недопустимое имя цели. Возможности включают: (1) обрабатывать его как "_blank" (2) обрабатывать его как имя окна (как если бы не было недопустимого подчеркивания) (3) обрабатывать его как явно пустое имя окна (4) обрабатывать его как там не было целевого атрибута. - Любой браузер может выбрать любую интерпретацию.
Джесси Чизхольм
0

Атрибут target ссылки заставляет браузер открывать страницу назначения в новом окне браузера. Использование _blankв качестве целевого значения будет порождать новое окно каждый раз, в то время как использование _newбудет порождать только одно новое окно, и каждая ссылка, щелкнувшая с целевым значением _new, заменит страницу, загруженную в ранее появившемся окне.

Карлос Гусман
источник
0

Для того, чтобы открыть ссылку в новой вкладке / окне, вы будете использовать <a target="_blank">.

значение _blank= целевой контекст просмотра: новый: вкладка или окно в зависимости от настроек просмотра

значение _new= недействительно; нет такого значения в HTML5 для целевого атрибута элемента

атрибут target со всеми значениями элемента: демонстрация видео

Даниил
источник
-1

Использование _New полезно при работе на страницах с Iframed. Так как target = "_ blank" не справляется с задачей и открывает страницу в том же iframe ... target new - лучшее решение для страниц Iframe. Только мои пять центов.

Оззи Гонсалес
источник