Оригинальный выход из ситуации предложил на днях пользователь форума talk.pr-cy.ru — amigo. Разумеется, все существующие на сегодняшний момент скрипты защиты от копирования контента его не удовлетворили, ввиду малой эффективности (см. выше). Он предложил (языком оригинала):
Возможно ли написать скрипт, чтобы при копировании контента, буквы автоматически заменялись? В этом случае вебмастер даже не будет догадываться о защите, а на выходе получит текст с кракозябрыми для поисковиков. То есть заменять букву «а» кириллицей на букву «a» латиницы. Таких букв несколько, поэтому можно было бы заметно изменить копируемой у вас контент. Так и с уникальностью вашего контента проблем не будет (во всяком случае уменьшится), и вебмастера накажите орфографическими ошибками.
При этом, автор идеи просит помощи у программистов для реализации такого кода, хотя в итоге, ничего сложного в реализации нет, пару строк кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <span class="tag"><script</span> <span class="atn">type</span><span class="pun">=</span><span class="atv">"text/javascript"</span><span class="tag">></span> <span class="kwd">function</span><span class="pln"> addTrans</span><span class="pun">()</span> <span class="pun">{</span> <span class="kwd">var</span><span class="pln"> d </span><span class="pun">=</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">getElementsByTagName</span><span class="pun">(</span><span class="str">'body'</span><span class="pun">)[</span><span class="lit">0</span><span class="pun">];</span> <span class="kwd">var</span><span class="pln"> e </span><span class="pun">=</span><span class="pln"> window</span><span class="pun">.</span><span class="pln">getSelection</span><span class="pun">();</span> <span class="kwd">var</span><span class="pln"> c </span><span class="pun">=</span><span class="pln"> e </span><span class="pun">+</span> <span class="str">""</span><span class="pun">;</span> <span class="kwd">var</span><span class="pln"> f </span><span class="pun">=</span> <span class="str">"С с Е е Т О о р Р А а Н К Х х В М y З 3"</span><span class="pun">.</span><span class="pln">split</span><span class="pun">(</span><span class="str">/ +/</span><span class="pln">g</span><span class="pun">);</span> <span class="kwd">var</span><span class="pln"> g </span><span class="pun">=</span> <span class="str">"C c E e T O o p P A a H K X x B M у 3 З"</span><span class="pun">.</span><span class="pln">split</span><span class="pun">(</span><span class="str">/ +/</span><span class="pln">g</span><span class="pun">);</span> <span class="kwd">var</span><span class="pln"> b</span><span class="pun">;</span> <span class="kwd">for</span> <span class="pun">(</span><span class="kwd">var</span><span class="pln"> b </span><span class="pun">=</span> <span class="lit">0</span><span class="pun">;</span><span class="pln"> b </span><span class="pun"><</span><span class="pln"> f</span><span class="pun">.</span><span class="pln">length</span><span class="pun">;</span><span class="pln"> b</span><span class="pun">++)</span> <span class="pun">{</span><span class="pln"> c </span><span class="pun">=</span><span class="pln"> c</span><span class="pun">.</span><span class="pln">split</span><span class="pun">(</span><span class="pln">f</span><span class="pun">[</span><span class="pln">b</span><span class="pun">]).</span><span class="pln">join</span><span class="pun">(</span><span class="pln">g</span><span class="pun">[</span><span class="pln">b</span><span class="pun">])</span> <span class="pun">}</span> <span class="kwd">var</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">createElement</span><span class="pun">(</span><span class="str">'div'</span><span class="pun">);</span><span class="pln"> a</span><span class="pun">.</span><span class="pln">style</span><span class="pun">.</span><span class="pln">position </span><span class="pun">=</span> <span class="str">'absolute'</span><span class="pun">;</span><span class="pln"> a</span><span class="pun">.</span><span class="pln">style</span><span class="pun">.</span><span class="pln">left </span><span class="pun">=</span> <span class="str">'-99999px'</span><span class="pun">;</span><span class="pln"> d</span><span class="pun">.</span><span class="pln">appendChild</span><span class="pun">(</span><span class="pln">a</span><span class="pun">);</span><span class="pln"> a</span><span class="pun">.</span><span class="pln">innerHTML </span><span class="pun">=</span><span class="pln"> c</span><span class="pun">;</span><span class="pln"> e</span><span class="pun">.</span><span class="pln">selectAllChildren</span><span class="pun">(</span><span class="pln">a</span><span class="pun">);</span><span class="pln"> window</span><span class="pun">.</span><span class="pln">setTimeout</span><span class="pun">(</span><span class="kwd">function</span> <span class="pun">()</span> <span class="pun">{</span><span class="pln"> d</span><span class="pun">.</span><span class="pln">removeChild</span><span class="pun">(</span><span class="pln">a</span><span class="pun">)</span> <span class="pun">},</span> <span class="lit">0</span><span class="pun">)</span> <span class="pun">}</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">oncopy </span><span class="pun">=</span><span class="pln"> addTrans</span><span class="pun">;</span> <span class="tag"></script> </span> |
Тот же скрипт, если вы любите минимализм:
1 2 3 | <script type="text/javascript">function addTrans(){var d=document.getElementsByTagName('body')[0];var e=window.getSelection();var c=e+"";var f="С с Е е Т О о р Р А а Н К Х х В М y З 3".split(/ +/g);var g="C c E e T O o p P A a H K X x B M у 3 З".split(/ +/g);var b;for(var b=0;b<f.length;b++){c=c.split(f[b]).join(g[b])}var a=document.createElement('div');a.style.position='absolute';a.style.left="-99999px";d.appendChild(a);a.innerHTML=c;e.selectAllChildren(a);window.setTimeout(function(){d.removeChild(a)},0)}document.oncopy=addTrans;</script> |
Данный скрипт необходимо вставить перед закрывающим тегом
В переменные f (русские буквы) и g (написание латынью) можно дополнительно вставить другие символы для замены — при крайней необходимости, так как известный список английских букв похожих на русские выглядит следующим образом:
1 2 3 | <span class="pln">C c E e T O o p P A a H K X x B M </span><span class="pun">у</span> <span class="pun">З</span> |
Маленькое пояснение к цифре 3 и букве З. Если в тексте встречается буква З — меняем ее на цифру 3. Если встречается цифра 3 — меняет на букву З. Заменив таким набором русские буквы, практически весь текст (после копирования с вашего сайта) приходит в негодность.
Скопируйте любой текст через такую защиту и проверьте на орфографические ошибки в любом сервисе. Или в обычном Microsoft Office. Результат будет следующим:
Оригинальная защита текста от копирования: русские буквы заменяем английскими
P.S. Уникальность данного метода защиты от копирования текста состоит в том, что копипастер не догадывается о «троянском коне». Разумеется, если он использует инструменты проверки правописания (а они встроены в браузеры) или он придирчив к таким вещам и очень внимательный, то «подмену» он обнаружит. В любом случае, это доставит ему дополнительных хлопот по раскодированию текста, ведь в итоге он оказывается непригодным для индексирования (роботы поисковых систем воспринимают такой текст наряду с синонимизированными дорвеями).
Источник: Вячеслав Скоблей
Статья была полезной?