Открытие внешних ссылок в новом окне
Не знаю, кому как, а лично мне очень не нравится, когда при клике на ссылку в тексте статьи меня переслыают на другой сайт. Я же еще не дочитал!
Это очень неудобно и со временем вырабатывается привычка кликать везде средней кнопкой мыши. Однако, есть и более культурный способ, ведь у ссылок давно существует атрибут target="_blank", который открывает эту ссылку в новом окне. Но, его нужно проставлять вручную у каждой ссылки и это быстро недоедает, а юзеры тем временем уходят с сайта не дочитав заметку.
Задачу нужно решить, причем быстро, просто и навсегда. Поэтому я решил переложить выставление аттрибута ссылки на крепкие плечи jQuery — он не подведёт!
Вот мой маленький, симпатичный скриптик:
Таким образом, открываться в текущем окне будут только относительные ссылки, или абсолютные, но на ваш сайт.
Работает на jQuery версии 1.7+. Нагрузки нет, так как замечательная функция «on» срабатывает только при наступлении события (в нашем случае — при клике на ссылку), не развешивая события заранее. Соответственно, вызов не нужно оборачивать в $(document).ready().
Это очень неудобно и со временем вырабатывается привычка кликать везде средней кнопкой мыши. Однако, есть и более культурный способ, ведь у ссылок давно существует атрибут target="_blank", который открывает эту ссылку в новом окне. Но, его нужно проставлять вручную у каждой ссылки и это быстро недоедает, а юзеры тем временем уходят с сайта не дочитав заметку.
Задачу нужно решить, причем быстро, просто и навсегда. Поэтому я решил переложить выставление аттрибута ссылки на крепкие плечи jQuery — он не подведёт!
Вот мой маленький, симпатичный скриптик:
$(document).on('click', 'a', function() {
// Регулярное выражение для определения, ваш ли это сайт? (нужно изменить)
var site = /bezumkin\.ru/;
// Получаем направление ссылки
var href = $(this).attr('href');
// Работаем только если ссылка абсолютная, и ведёт не на наш сайт
if (/^(http|https|ftp)/.test(href) && !site.test(href)) {
$(this).attr('target', '_blank');
}
})Принцип действия очевиден: проверяем при клике, куда ведет ссылка, и если это не наш сайт — то ставим атрибут target="_blank". И всё, ссылка откроется в новом окне.Таким образом, открываться в текущем окне будут только относительные ссылки, или абсолютные, но на ваш сайт.
Работает на jQuery версии 1.7+. Нагрузки нет, так как замечательная функция «on» срабатывает только при наступлении события (в нашем случае — при клике на ссылку), не развешивая события заранее. Соответственно, вызов не нужно оборачивать в $(document).ready().
Комментарии: 39
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Но моей задачи это не решает — всё равно придётся проставлять атрибуты руками, только немного другие.
var site = location.href;
site = site.substring(7, site.indexOf('/', 7));
получается «bezumkin.ru», можете проверить в консоли
2. bezumkin.ru это не регулярное выражение /bezumkin\.ru/. Как его превратить в регулярку, автоматически?
Или парсить ссылку и вычленять у нее base url, а потом сверять с текущим адресом? Не спорю, можно и так, но это ненужное усложнение, как по мне.
А у Яндекса есть.
Могу тоже скриншотом или видео подтвердить если кто-то не верит мне
Если я не авторизовываюсь — то открывает в текущем окне. Прикол =)
меня например бесит когда читаешь статью и в ней же открываются демо или еще что там.
хотя уже выработалась привычке колесиком щелкать, но бывает попадаю.
кому то наоборот, нет каких либо конкретных правил.
к статье опубликованной здесь претензий не имею
ахах, забей короче
Очень не хватает индикации уровня комментария и пролистывания на тот, которому ответили =(
Сделаю, когда-нибудь.
где .asdf = к ответу
вроде работает…
аххах чето я седня тоже туплю неподецки
P.S. Сайт который я сейчас делаю там 7 твоих плагинов используется))) Спасибо!!!
Цитата из дефолтного чанка:
Такие ссылки нужны исключительно для сбора статистики. Если она вам не интересна — используйте плейсхолдер [[+url]], тогда у ссылки будет сразу конечный url.
Может, тогда поясните, что это за «красивые ссылки» в вашем понимании, которых нет сейчас в BannerY?
Между прочим, так и делается на блоге modx.
Не будем холиворить, но на моём сайте все ссылки открываются так с момента создания — просто скриптик был тупее, и стыдно было показать. Претензий к такому поведению не было.
Ну а ваш способ не прокатит для абсолютных ссылок на мой же сайт — а я люблю копипастить их с url. Подумаю про иконку, но мне не нравится как это выглядит в блоге MODX.
И уже все нормально!
Это Ваша постановка вопроса меня удивила. Ведь Вы пишите:
Если Вам лично неудобно, то почему не просто поменять поведение Вашего личного навигатора? Зачем заставить всех юзеров применить такое же поведение? Хода мышления не понимаю. Вы ведь можете просто заставить FF всегда открыть ссылкы вне настоящей страницы (в новом окне или складке).
Еще раз: спорить не хочу. И ваш js код краток и элегантен.
Так и делаю.
в чем то может он и прав.
но интернет слишком быстро развивается, чтобы все под одну гребенку)… ээх
А вот такая задача бывает ставится перед проектом (в виде например подобного сообщества). Что бы все внешние ссылки открывались в новом окне, но через внутренний редирект. Цель — не разбазаривать «вес» сайта (nofollow не рассматривается). Пример реализации — vk.com
Возможно ли реализовать подобное в Tikets? Или нужно «допиливать» например этот скрипт…