Защита от копирования с сайта путем добавления ссылки.

24.5.2015 - 3703 просмотрa ;)
Подписывайся на мой канал в телеграмме 💎 Sapeц, где я публикую мысли и важные сообщения по теме заработка на ссылках.

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

А идея-то добрая..
Как оно работает ?

  • Выделяешь текст на сайте,
  • нажимаешь Ctrl-c,
  • текст попадает в буфер


Но в конце текста добавляется URL на страничку, откуда скопировали текст.

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

https://gist.github.com/bes-internal/63e82299a6f609ff4577

И о чудо всего 15 строчек кода..

Вставляем на сайт и оно работает !

<script defer>
function nsaddlink() {
//только для тех кто умеет копировать
if (typeof window.getSelection == "undefined") return;
var selection = window.getSelection(),
newdiv = document.createElement('div'),
newa = document.createElement('a');
//скрываем служебный блок и ссылку в скопированном тексте
newa.style.position=newdiv.style.position = 'absolute';
newdiv.style.left=newa.style.left='-9999px';
//ссылка на текущую страницу и анкор (можно и без анкора, но если вставляется как текст то ссылка как бы сохраняется)
newa.href=document.location.href;
newa.innerHTML=" "+document.location.href;
// не добавляем копирайт к коротким выделениям, 120 символов выведено имирическим путем
if (selection.getRangeAt(0).cloneContents().textContent.length<120) {return}
//вставляем скопированный текст и ссылку в служебный блок и делаем новое выделение, которое пользователь и копируем в буфер
newdiv.appendChild(selection.getRangeAt(0).cloneContents());
newdiv.appendChild(newa);
document.body.appendChild(newdiv);
selection.selectAllChildren(newdiv);
//удляем служебный блок через некоторое время после копирования
window.setTimeout(function(){document.body.removeChild(newdiv);}, 200);
}
//синхронно (перед закрывающимся body) вешаем наш скрипт на событие копирования
document.addEventListener('copy', nsaddlink);
<\/script>
view raw gistfile1.js hosted with ❤ by GitHub

А вот такой код я разместил у себя на блоге, чуть чуть исправленный:

// при копировании добавляем URL
function nsaddlink() {
if (typeof window.getSelection == "undefined") return; //только для тех кто умеет копировать
var selection = window.getSelection(),
newdiv = document.createElement('div'),
newa = document.createElement('a');
newa.style.position=newdiv.style.position = 'absolute'; //скрываем служебный блок и ссылку в скопированном тексте
newdiv.style.left=newa.style.left='-9999px';
newa.href=document.location.href;
newa.innerHTML=" Источник: "+document.location.href; //ссылка на текущую страницу и анкор (можно и без анкора, но если вставляется как текст то ссылка как бы сохраняется)
newdiv.appendChild(selection.getRangeAt(0).cloneContents());
newdiv.appendChild(newa);
document.body.appendChild(newdiv);
selection.selectAllChildren(newdiv); //вставляем скопированный текст и ссылку в служебный блок и делаем новое выделение, которое пользователь и копируем в буфер
window.setTimeout(function(){document.body.removeChild(newdiv);}, 200); //удляем служебный блок
}
document.addEventListener('copy', nsaddlink); //синхронно (перед закрывающимся body) вешаем наш скрипт на событие копирования

На этом хочу закончить..

Статьи из раздела, Видеочат рулетка