target = „_ blank” vs. target = „_ nowy”


512

Jaka jest różnica między tym, <a target="_new">a <a target="_blank">którego powinienem użyć, jeśli chcę tylko otworzyć link w nowej karcie / oknie?


73
Podsumowanie aktualnych odpowiedzi: _newnie ma żadnego specjalnego znaczenia. Ty też możesz pisać _white_little_lamb.
Álvaro González

10
@ x3ro Jak to źle powiedzieć, że „ _new” nie ma żadnego specjalnego znaczenia?
Álvaro González

3
@ ÁlvaroG.Vicario Miałem na myśli „Możesz pisać ... zamiast tego”. Ale myśląc o tym, argumentowałbym, że „nie ma specjalnego znaczenia” nie jest tym samym, co „wyraźnie zniechęca”, ale to może być moje dręczenie;)
fresskoma

5
Chciałbym przypomnieć wszystkim, że używanie target="_blank"bez rel="noopener"jest potencjalną luką w zabezpieczeniach. Wyszukaj, rel="noopener"aby dowiedzieć się więcej.
Flimm,

Odpowiedzi:


651

Użyj „_blank”

Zgodnie ze specyfikacją HTML5 :

Poprawną nazwą kontekstu przeglądanie jest dowolny ciąg co najmniej jednego znaku, który nie rozpoczyna się od znaku U + 005F LOW LINE. (Nazwy rozpoczynające się znakiem podkreślenia są zarezerwowane dla specjalnych słów kluczowych).

Poprawną nazwą kontekstu przeglądania lub słowo kluczowe jest dowolny ciąg znaków, który jest albo prawidłowa nazwa kontekst przeglądania lub ASCII, który jest wielkości liter mecz do jednej: _blank, _self, _parent, albo _top.”- Źródło

Oznacza to, że nie ma takiego słowa kluczowego jak _neww HTML5, a nie w HTML4 (aw konsekwencji XHTML) . Oznacza to, że nie będzie spójnego zachowania, jeśli użyjesz tego jako wartości dla atrybutu docelowego.

Zalecenie bezpieczeństwa

Jak zauważyli Daniel i Michael w komentarzach, kiedy używasz targetu _blankwskazującego na niezaufaną stronę internetową, powinieneś dodatkowo ustawić rel="noopener". Zapobiega to zwijaniu się strony otwierającej z otwieraczem przez JavaScript. Zobacz ten post, aby uzyskać więcej informacji.


7
Usunięcie pogrubionego tekstu ze specyfikacji sprawia, że ​​ten cytat brzmi myląco okrągło. Czytam to jako „A valid browsing context namelub słowo kluczowe to dowolny ciąg znaków, który jest albo a valid browsing context name…”
Alex Grin

6
@lyoshenka, @ x3ro: Pozwoliłem sobie dodać poprzedni akapit do cytatu. To powinno wyjaśnić zamieszanie.
mercator

5
@aesede: Przeczytaj specyfikację. Są to nie ważne, bo „my_custom_name” nie może być poprzedzona znakiem podkreślenia. Zatem „nowe” byłoby w porządku, ale „_new” nie jest!
fresskoma

7
Dla bezpieczeństwa jest to ważna lektura mathiasbynens.github.io/rel-noopener
Daniel F

6
Proszę zwrócić uwagę, dodając, że ludzie powinni również dodać rel="noopener noreferrer"powodu javascript luka atak ztarget="_blank"
Michael

126

Użycie target="_blank"sprawi, że przeglądarka utworzy nową kartę lub okno przeglądarki, gdy użytkownik kliknie łącze.

Używanie target="_new"jest technicznie nieprawidłowe zgodnie ze specyfikacjami, ale o ile wiem, każda przeglądarka będzie zachowywać się w ten sam sposób:

  • wyszuka kartę lub okno o nazwie kontekstowej „_new”
  • jeśli zostanie znaleziona karta / okno „_new”, adres URL zostanie do niego załadowany
  • jeśli nie zostanie znaleziony, tworzona jest nowa karta / okno z nazwą kontekstu „_new” i załadowanym do niego adresem URL

Uwaga target="_new"będzie zachowywać się dokładnie tak samo jak target="new", a drugi jest prawidłowym HTML, podczas gdy drugi jest nieprawidłowym HTML.

Dodając do tego pewne zamieszanie, w HTML4 targetatrybut był przestarzały. W HTML5 ta decyzja została cofnięta i jest to ponownie oficjalna część specyfikacji. Wszystkie przeglądarki obsługują targetbez względu na używaną wersję HTML, ale niektóre weryfikatory oznaczą użycie jako przestarzałe, jeśli twój typ dokumentu to HTML4.


4
Zasadniczo, jeśli mam dwa (lub więcej) linków target="_new", oba otworzą się na tej samej karcie, jeden nadpisując drugi?
art-solopov

4
@ art-solopov, o ile mi wiadomo, tak właśnie dzieje się w każdej przeglądarce. Jednak „_new” jest niedozwoloną wartością dla celu, więc nie rób tego.
Abhi Beckert

25

TL; DR
USE _blank

Atrybut docelowy określa, gdzie otworzyć połączony dokument.

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

PONIEWAŻ „_new” nie jest żadnym z tych, KTÓRE ZOSTANĄ PODDANE pod „nazwa ramki”, więc jeśli użytkownik kliknie to hiperłącze, nie otworzy nowej karty, zamiast zaktualizować istniejącą. Natomiast w _blank, jeśli użytkownik kliknie dwa razy, wówczas otworzą się 2 nowe karty.


21

Wiem, że to stare pytanie, a poprawna odpowiedź, użycie _blank, została wspomniana kilka razy, ale używanie <a target="somesite.com" target="_blank">Link</a> jest zagrożeniem dla bezpieczeństwa .

Jest on zalecany ( korzyści wydajności ) do wykorzystania:

<a href="somesite.com" target="_blank" rel="noopener noreferrer">Link</a>

1
Jeszcze kilka dodatkowych lektur na temat ryzyka związanego z bezpieczeństwem: jitbit.com/alexblog/…
8bithero



12

rozumiem, że target = whateverposzuka ramki / okna o tej nazwie. Jeśli nie zostanie znaleziony, otworzy się nowe okno o tej nazwie. Jeśli whatever == "_new"pojawi się tak, jakbyś używał, _blankz wyjątkiem .....

Użycie jednej z zastrzeżonych nazw docelowych ominie fazę „szukania”. Tak więc target = "_blank"na tuzinie linków otworzy się tuzin pustych okien, ale target = whateverna tuzinie linków otworzy się tylko jedno okno. target = "_new"na tuzin linków może dawać niestałe zachowanie. Nie próbowałem tego na kilku przeglądarkach, ale powinienem otworzyć tylko jedno okno.

Przynajmniej tak interpretuję zasady.


9

Uwaga - pamiętaj, aby zawsze dołączać „cytaty” - przynajmniej w Chrome, target=_blank(bez cudzysłowów) NIE JEST TAKIE SAME, ponieważ target="_blank"(z cudzysłowami).

Ten ostatni otwiera każdy link w nowej karcie / oknie. Pierwsze (brakujące cytaty) otwiera pierwszy link, który klikniesz w jednej nowej karcie / oknie, a następnie zastępuje tę samą kartę / okno każdym kolejnym klikniętym linkiem (który jest również nazywany brakującymi cytatami).


Bardzo dobra uwaga. Natknąłem się na ten problem, gdy nie umieściłem _blank w cudzysłowie. Link, który kliknąłem z mojej nowo utworzonej „pustej” karty, polegał na pisaniu treści na tej karcie zamiast otwieraniu nowej karty. Umieszczenie _blank w cudzysłowie zmusza chrome do otwierania nowej karty za każdym razem.
Steve Scherer

Upewnij się także, że używasz „_blank”, a nie „_BLANK”. Chrome jest naprawdę wybredny w sprawach i nie otworzy nowej karty, używając „_BLANK” wiele razy.
Steve Scherer

5
  • _blank jako wartość docelowa za każdym razem odradza nowe okno,
  • _new odrodzi tylko jedno nowe okno.

Ponadto każdy link kliknięty wartością docelową _new zastąpi stronę załadowaną w poprzednio spawnowanym oknie.

Możesz kliknąć tutaj Kiedy użyć _blank lub _new, aby wypróbować to sam.


Czy możesz wymienić, które przeglądarki honorują _newzgodnie z opisem?
Dima Tisnek

@ qarma To zachowanie jest takie, jak opisano we wszystkich przeglądarkach, które znam, _newnie jest magicznym słowem kluczowym, to tylko nazwa, jeśli istnieje okno o takiej nazwie, użyje go ponownie, w przeciwnym razie je otworzy. Kliknięcie wielu linków do tego okna spowoduje otwarcie różnych stron w nazwanym oknie, a nie otwarcie wielu nowych stron.
scragar

Specyfikacja faktycznie sugeruje przeglądarkom, że są one ignorekierowane na podkreślenie, ale nie są słowami kluczowymi. Nie ma sugestii, co powinna zrobić przeglądarka, która „ignoruje” niepoprawną nazwę docelową. Możliwości obejmują: (1) traktuj to jak „_blank” (2) traktuj to jak nazwę okna (tak jakby nie było nielegalnego podkreślenia) (3) traktuj to jak jawnie pustą nazwę okna (4) traktuj to jak tam nie był atrybutem docelowym. - Każda przeglądarka może wybrać dowolną interpretację.
Jesse Chisholm,

0

Atrybut docelowy łącza zmusza przeglądarkę do otwarcia strony docelowej w nowym oknie przeglądarki. Użycie _blankjako wartości docelowej spowoduje odrodzenie nowego okna za każdym razem, natomiast użycie _newspowoduje odrodzenie tylko jednego nowego okna, a każdy link kliknięty wartością docelową _newzastąpi stronę załadowaną w poprzednio odrodzonym oknie


0

Aby otworzyć link w nowej karcie / oknie, którego użyjesz <a target="_blank">.

wartość _blank= ukierunkowany kontekst przeglądania: nowy: zakładka lub okno w zależności od ustawień przeglądania

wartość _new= niepoprawny; brak takiej wartości w HTML5 dla atrybutu target na elemencie

atrybut target z wszystkimi jego wartościami na elemencie: demo wideo


-1

Użycie _New jest przydatne podczas pracy na stronach, które są iframowane. Ponieważ target = "_ blank" nie załatwia sprawy i otwiera stronę w tym samym iframe ... target new jest najlepszym rozwiązaniem dla stron iframe. Tylko moje pięć centów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.