Защита на съдържанието на сайта от копиране
Първият начин е най-лесният. Потискане на избора на текст, движението на мишката и щракването, копирането и събитията от контекстното меню чрез блокиране на десния бутон на мишката. Поставя се манипулатор, който предотвратява избухването на събитието в йерархията на DOM и незабавно връща флаг за отмяна:
Методът е междубраузърен, но за щастие работи добре, като изберете целия текст с клавишите Ctrl + A и след това го копирате. Във Firefox защитата срещу блокиране на контекстното меню се заобикаля чрез настройките.
Следният метод се използва в онлайн библиотеки, които са собственост на преписвачи и позволяват безплатно четене само през техния уебсайт. Принципът на тази защита е, че на всеки 10 милисекунди се проверява наличието на избрания текст и ако бъде намерен, фокусът се принуждава към друг елемент на страницата, в случая низът за търсене. В този случай селекцията, разбира се, се губи.
// Помощна функция за настройка на манипулатор на събития функция addHandler(събитие, манипулатор) if (document.attachEvent) document.attachEvent('on' + event, манипулатор); > друго ако (document.addEventListener) document.addEventListener(събитие, манипулатор, невярно); > >
// Помощна функция за принудително премахване на селекция функция killSelection() if (window.getSelection) window.getSelection().removeAllRanges(); > друго ако (document.selection && document.selection.clear) document.selection.clear(); > >
// Функция за обработка на натиснати клавиши функция noSelectionEvent(event) var event = event window.event;
// При натискане на Ctrl+A и Ctrl+U, демаркирайте // и потискайте бълбукането на събитие var key = event.keyCode event.which; ако (event.ctrlKey &&(ключ == 65 ключ == 85)) killSelection(); ако (event.preventDefault) < event.preventDefault(); > друго < event.returnValue = невярно; > връща невярно; > >
// Задаване на манипулатори на клавиатурата addHandler('keydown', noSelectionEvent); addHandler('keyup', noSelectionEvent);
Следващият метод се основава, напротив, не на премахване на селекцията от текста, а на селекцията на някакъв външен елемент от таймер. Например:
// Помощна функция за избор на текст функция protectHTML() var el=document.getElementById('protect');
if (document.body.createTextRange) var tmp=document.body.createTextRange(); tmp.moveToElementText(el); tmp.select(); > друго ако (window.getSelection) var tmp=window.getSelection(); if (tmp !== null) if (tmp.setBaseAndExtent) var child=el.lastChild; tmp.setBaseAndExtent(el, 0, child, typeof(child.innerText) == 'undefined' ? child.textContent.length : child.innerText.length); > else var range=document.createRange(); range.selectNodeContents(el); tmp.removeAllRanges(); tmp.addRange(диапазон); > > > > // Изпълнение на функцията чрез таймер setInterval('protectHTML()',10);
функция addLink() var body_element = document.getElementsByTagName('body')[0]; var selection = window.getSelection(); var pagelink = '
// Създаване на нов елемент извън екрана var newdiv = document.createElement('div'); newdiv.style.position='absolute'; newdiv.style.left='-99999px'; body_element.appendChild(newdiv);
// Премахване на създаден елемент window.setTimeout(function() body_element.removeChild(newdiv); >,0); >
Специално за такива хитри строители на сайтове измислиха разширениеFirefox Backgroundimage Saver, който ви позволява да запазвате фонови изображения.
Пасивната защита срещу копиране включва използването на специално CSS правило, което предотвратява подчертаването на определена част от текста. Невъзможно за избиране - невъзможно за копиране (е, почти :)).