В последнее время все внешние ссылки на моём форуме перестали открываться в новой вкладке. Я дважды проверил опцию «Открывать внешние ссылки в новой вкладке по умолчанию» — она включена:
Можете протестировать это здесь, в Meta? Настройте свои предпочтения здесь, чтобы открывать внешние ссылки в новой вкладке, и проверьте, работает ли это у вас. У меня это работает довольно хорошо.
Один из лучших первых шагов в устранении неполадок — это непосредственный осмотр DOM с помощью консоли для разработчиков веб-сайтов, а также проверка точных атрибутов вашей ссылки, в частности атрибута «target».
Часто эти атрибуты DOM нельзя увидеть, просто читая исходный код (они могут существовать в DOM, но отсутствовать в исходном коде), поэтому вам нужно будет запросить DOM, чтобы получить атрибуты (чтобы быть на 100% уверенным).
Нет. Чтение исходного кода не то же самое, что проверка DOM.
Атрибуты DOM могут отличаться (и часто отличаются) от исходного кода; особенно на веб-сайтах, которые активно используют JavaScript для манипуляции DOM (как Discourse).
Вот почему я конкретно упомянул необходимость запросить DOM, а не просто посмотреть на исходный код
Однако я согласен с вами, @osioke, что в исходном коде явно отсутствует атрибут target; но при проверке DOM мы будем «уверены» в значении атрибута, поскольку DOM может находиться в ином состоянии, чем исходный код (и часто находится в ином состоянии).
Лично я большой сторонник принципа «никогда ничего не предполагать», поэтому я предложил @riteshsaini «убедиться», проверив DOM, а затем «действовать исходя из этого».
Весьма вероятно, что атрибуты target в ссылке DOM и в исходном коде находятся в одинаковом состоянии; но я всегда рекомендую людям, занимающимся устранением неполадок, не делать подобных предположений; отсюда и моя рекомендация запросить DOM как шаг в процессе диагностики.
<script type="text/discourse-plugin" version="0.8">
api.onPageChange((url, title) => {
// Автоматически открывать внешние ссылки в новой вкладке или окне
var pc = 1;
if ($("html").hasClass("mobile-device")) pc = 0;
var links = document.links;
for (var i = 0, linksLength = links.length; i < linksLength; i++) {
if (links[i].hostname != window.location.hostname) {
if (pc) links[i].target = '_blank'; else links[i].target = '_self';
}
}
});
</script>
… и наглядно демонстрирует на примере надежного API Discourse, что DOM и исходный код будут находиться в разных состояниях, и вы не увидите целевые атрибуты в исходном коде HTML, установленные вышеупомянутым JS
Проверяли ли вы настройки в своём личном профиле в разделе preferences/interface? Обычно такая ситуация возникает, когда в личном профиле отключено открытие внешних ссылок в новых вкладках.
Галочка была снята, поэтому я поставил её. Теперь ссылки открываются в новой вкладке только когда я авторизован. Если проверить сайт в режиме инкогнито, проблема всё ещё сохраняется.
Для форумов, где осуществляется обмен и загрузка файлов с использованием ссылок через Bitly или другие сайты (менее безопасно), вы бы рассмотрели возможность использования rel="noopener noreferrer" вместо rel="nofollow"?
Вы можете узнать больше о noopener noreferrer.
Я могу рассмотреть возможность добавления noopener noreferrer, но при этом мне всё равно нужно будет добавить nofollow вместе с ними. Дело в том, что я не хочу, чтобы Google переходил по этим ссылкам или индексировал их, поскольку это партнёрские ссылки. С этим может помочь только nofollow.