Защита контента от копирования. Часть 2



В предыдущей статье Защита контента от копирования. Часть 1 было описано, как я пришел к мысли о защите контента, а также показан базовый скрипт, который я взял за основу. Также я решил, что мне нужен способ, как указывать скрипту, какой текст защищать, а какой нет.

Для этого я решил использовать классы css, protect, no-protect. Тоесть, если у тэга есть класс protect, копирование, вызов контекстного меню и т.п будет запрещено. Если у тэге есть класс no-protect, то вся эта защита отключается.

Таким образом, мы можем контролировать с помощью HTML

<p class="protect"> Здесь нельзя копировать, выделять текст, вызывать меню <p class="no-protect"> А вот здесь уже можно </p> <p> Здесь нельзя </p> </p>   <p class="no-protect"> Вот здесь тоже можно </p>   <p> Вот здесь тоже можно </p>

 

Для этого нужно при загрузке страницы нужно выбрать сначала все узлы с классом protect, повесить на них определённые обработчики. Затем выбрать все узлы с классом no-protect, повесить на них свои обработчики. Скрипт рекумендую загружать либо внижу страницы, перед тэгом body, либо использовать onload или jQuery(document).ready();. Иначе не получится ничего найти)

Нашел здесь http://javascript.ru/unsorted/top-10-functions#8-getelementsbyclass функцию для поиска по имени класса для браузеров, которые не имею поддержки getElemebtsByClassName().

 

if(document.getElementsByClassName) 
{
	getElementsByClass = 
function
(classList, node) { return (node || document).getElementsByClassName(classList); }   } else { getElementsByClass = function(classList, node) { var node = node || document, list = node.getElementsByTagName('*'), length = list.length, classArray = classList.split(/\s+/), classes = classArray.length, result = [], i,j;   for(i = 0; i < length; i++) for(j = 0; j < classes; j++) if(list[i].className.search('\\b' + classArray[j] + '\\b') != -1) { result.push(list[i]); break; }   return result; } }

 

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

Далее обычным циклом вешаем обработчики

var oProtect = getElementsByClass('protect'),
		oNotProtect = getElementsByClass('no-protect');
 
var iProtect = oProtect.length,
		iNotProtect = oNotProtect.length;		
 
for(var i = 0; i < iProtect; i++)
{
	oProtect[i].ondragstart = catchControlKeys;
 
	oProtect[i].onselectstart = catchControlKeys;
 
	oProtect[i].oncopy = catchControlKeys;
 
	oProtect[i].oncontextmenu = catchControlKeys;
 
	oProtect[i].onkeypress = catchControlKeys;
}
 
for(var i = 0; i < iNotProtect; i++)
{
	oNotProtect[i].ondragstart = disableProtection;
 
	oNotProtect[i].onselectstart = disableProtection;
 
	oNotProtect[i].oncopy = disableProtection;
 
	oNotProtect[i].oncontextmenu = disableProtection;
 
	oNotProtect[i].onkeypress = disableProtection;
}

Что получилось дальше, смотрите в статье Защита контента от копирования. Часть 3

 

Благодарность принимаю в виде:

  • "Спасибо" от чистого сердца
  • лайка / шары
  • комментария
  • Яндекс.Денег 4100162037745
  • WebMoney Z150917603458, R351335054010, E199046692457, U207019834816



Оставить комменатрий

Последние 0 комментариев(я)