На днях уважаемый Devaka выкатил свою либу по защите от копирования текстов copyright.js, однако то ли я пьян, то ли Devaka был пьян, но его скрипт не работал. Ни у меня, ни на его сайте, нигде. Точнее если бы скрипт вообще не работал, то было бы странно, но его скрипт то работал, то не работал.
А идея-то добрая..
Как оно работает ?
Но в конце текста добавляется 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> |
А вот такой код я разместил у себя на блоге, чуть чуть исправленный:
// при копировании добавляем 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) вешаем наш скрипт на событие копирования |
На этом хочу закончить..