В предыдцщих статьях Защита контента от копирования. Часть 1 и Защита контента от копирования. Часть 2 Были описаны причины, побудившие меня заняться защитой контента, рассказаны недостатки решений, которые я нашел в интернете, а также дана часть кода, которая помогает защищать контент.
В той статье мы повесили обработчики catchControlKeys и disableProtection на элементы с классами protect и no-protect соответственно.
Собственно, что в этих функциях
function disableProtection(event) { e = event || window.event; e.stopPropagation(); return true; }
Здесь мы разрешаем все, что угодно, для нашего узла, то есть, отключаем защиту.
Эта строка e.stopPropagation(); нужна для того, чтобы, отключив защиту для данного узла, скрипт не пошел выше по дереву. Ничего плохого он там не сделает, то лишний обход DOM нам ни к чему.
Далее, в функции catchControlKeys() мы проверяем, какое событие произошло, а также, какая клавиша была нажата (при событии keypress). Если нажаты клавиши, которые мы хотим запретить, то возвращаем false, если события, которые мы хотим запретить, то тоже возвращаем false. В иных случаях, возвращаем true, то есть разрешаем действие.
Так же здесь приведена вспомогательная функция getKeyCode(), которая возвращает код нажатой клавиши. Почему-то в инете на многих ресурсах пишут, что event.which бессмысленно использовать, потому что все браузеры возвращают код клавиши по event.keyCode. Честно говоря, у меня в FireFox 29.0.1 event.keyCode всегда возвращает 0, а вот event.which правильное значение.
function catchControlKeys(evn) { event = evn || window.event; var aRestrict = [117, 85, 99, 67, 97, 65]; /*117, 85 ctrl+u 99, 67 ctrl+c 97, 65 ctrl+a*/ if(aRestrict.indexOf(getKeyCode(event)) >= 0) return false; else if(event.type == 'dragstart'
|| event.type == 'selectstart'
|| event.type == 'contextmenu'
|| event.type == 'copy') return false; return true; } function getKeyCode(e) { var iCode = e.keyCode; if(!iCode) iCode = e.which; return iCode; }
Итоговый скрипт смотрим в следующей статье Защита контента от копирования. Часть 4
