Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Защита email от спамеров

, работает в чистом HTML (сайты-визитки)
Safety1st
сообщение 26.1.2020, 23:21
Сообщение #1
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Код оплатил в далёком 2011 г. Понадобилось заюзать для другого адреса, чуток разобрался smile.gif



Внутри <head> </head> надо вставить эту шляпу
Код
<script type="text/javascript">
function addEvent(fn) {
  window.addEventListener('load', fn);
}

function hex2bin( s ) {
  return decodeURIComponent(s.replace(/../g, '%$&'));
}

function getNthTextNode(el) {
  for (let i = 0; i < el.childNodes.length; i++) {
    let node = el.childNodes[i];

    if (node.nodeName === '#text') {
      return node;
    }
  }
}

addEvent(function() {
  let mailHref = document.getElementById('mailHref');
  let mailHrefText = getNthTextNode(mailHref);
  mailHref.setAttribute('href', hex2bin(mailHref.getAttribute('href-data')));
  if (mailHrefText) {
    mailHrefText.nodeValue = hex2bin(mailHrefText.nodeValue);
  }
});
</script>

Затем сконвертировать содержимое для тэга через сервис типа этого:


И вставить сам линк, куда хочется:
Код
<a title="напишите мне письмо" id="mailHref" href-data="6d61696c746f3a737570706f727440676f6c647372762e7275">737570706f727440676f6c647372762e7275</a>

Боты парсят сайты максимально тупо, ищут адреса в открытом виде, такой вот дешёвый и сердитый способ.

Благодарности:
wer1K: упрощение кода.

Отредактировал: Safety1st, - 5.2.2020, 16:20
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   Цитировать сообщение
Статус пользователя wer1K
сообщение 5.2.2020, 0:10
Сообщение #2
Стаж: 18 лет

Сообщений: 403
Благодарностей: 259
Полезность: 987

Меценат Меценат

Если убрать лишнее, то вот:

script
Код
function addEvent(fn) {
    window.addEventListener('load', fn);
  }

function hex2bin( s ) {
  return decodeURIComponent(s.replace(/../g, '%$&'));
}

function getNthTextNode(el) {
  for (let i = 0; i < el.childNodes.length; i++) {
    let node = el.childNodes[i];

    if (node.nodeName === '#text') {
      return node;
    }
  }
}

addEvent(function() {
  let mailHref = document.getElementById('mailHref');
  let mailHrefText = getNthTextNode(mailHref);
  mailHref.setAttribute('href', hex2bin(mailHref.getAttribute('href-data')));
  if (mailHrefText) {
    mailHrefText.nodeValue = hex2bin(mailHrefText.nodeValue);
  }
});


Отредактировал: wer1K, - 5.2.2020, 0:19
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Safety1st
сообщение 5.2.2020, 0:41
Сообщение #3
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Можете как-то пояснить, почему остальное оказалось лишним?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя wer1K
сообщение 5.2.2020, 1:22
Сообщение #4
Стаж: 18 лет

Сообщений: 403
Благодарностей: 259
Полезность: 987

Меценат Меценат

В функции:
Код
function addEvent(el, ev, fn) {
    if (el.addEventListener) {
        el.addEventListener(ev, fn);
    } else {
        el.attachEvent('on' + ev, fn);
    }
}


Излишняя проверка на поддержку метода addEventListener, если поддержки нет, то используется не стандартизированный attachEvent который работает только в IE9 - IE11 (читать подробнее на MDN), сегодня же поддержка addEventListener осуществляется всеми браузерами. В этой же функции было изначально 3 аргумента (елемент - el, событие - ev, функция - fn). У нас елемент всегда будет window, поскольку мы вешаем обработчик события именно на него, событие у нас так же никогда не меняется load (то есть когда документ загрузился мы выполняем функцию). В итоге мы оставляем лишь единственный аргумент - fn.

Следующая функция:
Код
function getNthTextNode( el, idx ) {
    var node;
    if (!idx) {
        idx = 0;
    }
    for (var i = 0; i < el.childNodes.length; i++) {
        node = el.childNodes[i];
        if (node.nodeName === "#text" ) {
            if (idx === 0 ) {
                return node;
            }
            idx--;
        }
    }
}


Принимает 2 аргумента, это элемент - el (в нашем случае это всегда mailHref) и idx, который мы нигде не передаем и у нас всегда будет выполнятся условие: if (!idx) {idx = 0;} (если нет idx, тогда присваиваем значение 0).
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Safety1st
сообщение 5.2.2020, 10:13
Сообщение #5
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

wer1K, можете ещё в вашем коде разметку пофиксить? Тогда я смогу добавить в шапку с чистой совестью smile.gif

Cкрытый текст
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя wer1K
сообщение 5.2.2020, 11:26
Сообщение #6
Стаж: 18 лет

Сообщений: 403
Благодарностей: 259
Полезность: 987

Меценат Меценат

В моей IDE все отступы с помощью пробелов. Все хорошо.

Скрин с WebStorm




Код

Код
function addEvent(fn) {
  window.addEventListener('load', fn);
}

function hex2bin( s ) {
  return decodeURIComponent(s.replace(/../g, '%$&'));
}

function getNthTextNode(el) {
  for (let i = 0; i < el.childNodes.length; i++) {
    let node = el.childNodes[i];

    if (node.nodeName === '#text') {
      return node;
    }
  }
}

addEvent(function() {
  let mailHref = document.getElementById('mailHref');
  let mailHrefText = getNthTextNode(mailHref);
  mailHref.setAttribute('href', hex2bin(mailHref.getAttribute('href-data')));
  if (mailHrefText) {
    mailHrefText.nodeValue = hex2bin(mailHrefText.nodeValue);
  }
});

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Safety1st
сообщение 5.2.2020, 11:39
Сообщение #7
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

wer1K, это сохраняем?

Код
<script type="text/javascript">
//<![CDATA[

//]]>
</script>
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя wer1K
сообщение 5.2.2020, 15:00
Сообщение #8
Стаж: 18 лет

Сообщений: 403
Благодарностей: 259
Полезность: 987

Меценат Меценат

Safety1st, на сегодняшний день достаточно просто <script>наш код</script>
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Safety1st
сообщение 5.2.2020, 18:24
Сообщение #9
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Обновил код в шапке good.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: