jkeks блог


Как у ссылок показывать один URL а переходить по другому ?

25.1.2019 - 896 просмотров ;)




Есть простая задача, юзеру безпалевно показывать одну ссылку, а переходить по другой.
Ну раз уж мы тут про деньги, то скажу что таких не хитрым обманом мы не то что бы совершаем некое злодеяние, а просто помогаем поддержать свой же ресурс.

Некоторые знают прекрасную партнерскую программу по сокращению ссылок sh.st. Где платят за переход по ссылке. Дак вот мы бы хотели ссылки на странице заменить ссылками от этой ПП, а юзеры в результате все равно попадут на ту же Википедию ixbt или куда вы там ссылаетесь, просто вам заплятят еще и денежку.

Дак воот..

Если бы каждый из вас поресерчил, то за минут 10 вообщем-то нашел способ Как перейти по нужным ссылкам а не тем что в a href.

итак наша ссылка


<a help="http://corneey.com/wVZ1H1" class="me" href="http://ya.ru" >Источник</a>

В ней все прекрасно. Гугля и Яндекс видят тэг a и атрибут href, видят что мы ссылаемся на правильные трастовые домены, все хорошо. Но нам надо перейти по http://corneey.com/wVZ1H1.

Мы безпалевно затолкали в атрибут help нашу желаемую ссылку. Наведя мышкой юзер нихрена не увидит, точнее он увидит ссылку на Яндекс.
Теперь мы берем свой кулак, и пишем обработчик для клика по ссылке:

JavaScript
$(".me").click(function(){
window.location.href='http://google.com';
return false;
})

вуаля !

Как видно код крайне сложен и непонятен.. но запомнить надо самое важное:

return false

оно запрещает переходить по ссылке. Точнее все происходит так:

  • При загрузке сайта определяем событие для обработки нажатия по ссылкам
  • Юзер нажал по ссылке
  • Браузер запустил нашего обработчика
  • Мы меняем URL текущей страницы (но пока все еще ничего не происходит)
  • Сообщаем браузеру return false что бы перехода не было
  • Браузер отменяет переход, но видит измененный href
  • Шагает по нашему href

Схема эта довольно шаткая, например тот же Firefox уже работает немного иначе:

  1. Мы меняем URL текущей страницы (браузер при этом все бросает и начинает переход)
  2. Сообщаем браузеру return false, но уже поздно, мы ушли..

и хотя результат одинаковый на обоих движках, технически происходит в Firefox все намного более асинхронно, и например блокирующий alert хромака, срывается в Firefox. т.е. Firefox самовольно киляет окно алерта, да и судя по всему все что было до этого.
PaleMoon на старом добром Gecko ведет себя точно так же как и Servo Firefox и киляет, кстати говоря, вообще системное окно, (или это все же XUL эмуляция, ну да да..).

Сыны Mozilla асинхронны как никогда даже в старчности.

Ну а что говоря о Хромаке, то я бы с завидной для меня уверенностью заявил что это баг. Ну не должен юзер переходить по ссылкам которые не такие как в href. Сдавайте баг в багбаунти во все браузеры.. я уже сдавал.. хватит мне.

Но предвижу я интернеты где для JavaScript будет только для галочки, только с разрешения, только под роспись, а то дак и запредит корпорация Бобра менять onclick, как запретила для uBlock трафик редактировать. Нефик!

Надо заканчивать, а то мой словарный понос разигрался не в шутку..

Кст, вот этот код все делает правильно для одного уникального id:


$("#me").click(function(){
window.location.href = $("#me").attr('help');
return false;
})

А вот такой код полностью самодостаточен и не требует никаких ембедок в тело страницы. Такой подход использовать проще всего, так же становится приятно от мысли что нам больше не нужен jQuery :


<a onclick="window.location.href='http://gestyy.com/wCTJ93';return false" href="http://ya.ru" >Самодетонация</a>





Видеочат рулетка
jAntivirus Рейтинг@Mail.ru