Откуда у target=”_blank” нижнее подчеркивание
Задавались когда-нибудь вопросом, почему все атрибуты как атрибуты, а у атрибута ссылки target значение с нижним подчеркиванием? 🤔
<a href="#" target="_blank">Я откроюсь в новом окне<a/>
Согласно спеке, у атрибута target есть 5 возможных значений (да, не только _blank):
🔗_blank — загружает страницу в новое окно браузера
🔗_self — загружает страницу в текущее окно
🔗_parent — загружает страницу во фрейм-родитель
🔗_top — отменяет все фреймы и загружает страницу в полном окне браузера
🔗{framename} — открывает документ во фрейме по имени {framename}
Наверняка, вы никогда и не использовали ничего, кроме _blank, и это не удивительно.
Зачем же тогда все остальные?
Этот вопрос уходит корнями в историю. В незапамятные времена, когда ajax-а не было и в помине, страницы часто делили на множество окошек с помощью тега <frameset>. Например, одно окошко служило навигацией, а другое — контентом. Получалось некое подобие обновления без перезагрузки страницы.
И нужно было как-то указывать браузеру, в каком фрейме показывать ответ. За это и отвечал атрибут target.
А что происходит, когда мы пишем blank без нижнего подчеркивания? Почему ссылка все равно открывается в новом окне?
А происходит вот что. Браузер видит blank и думает, что это имя фрейма. Он пытается открыть документ во фрейме с name=blank, и, не находя такого, открывает его в новом окне и дает ему такое имя.
Поэтому если вы кликнете по такой ссылке второй раз, то новое окно не откроется. В отличие от _blank, который при каждом нажатии откроет новое окно.
Можно ли писать blank без нижнего подчеркивания? В целом, да, но это не по стандарту (соотвественно, поведение будет как для фрейма).
Будут ли обновлять стандарт, раз frameset-ы давно канули в лету?
Скорее всего нет, т.к. до сих пор существуют сайты с фреймами. Обновление стандарта без обратной совместимости поломает эти сайты.
Ссылки: