2014-01-08 3 views
1

Ну, ребята, я работаю над тестовой системой для своего сайта, и я предполагаю, что люди, вероятно, попытаются скопировать мои вопросы и найти их в Google или распечатать экран изучите вопрос после теста.Лучшие практики - отключение/предотвращение копирования контента

Это возможные способы копирования информации:
1) Нажав кнопку PrintScreen;
2) Нажимая комбинацию клавиш: Alt + PrintScreen;
3) Нажимая правую кнопку мыши, нажимая на копию;
4) Нажимая комбинацию клавиш: Control + C;
5) Используя инструменты печати, такие как fraps, или sn snping tool;

Как я могу заставить пользователя закрыть все программы и не дать ему использовать перечисленные выше методы? Возможно, Javascript, или JQuery, но как?

+6

Ни один из методов защиты не будет работать, поэтому просто перестаньте раздражать своих пользователей. – zerkms

+1

абсолютно бессмысленный. есть «всегда» другая работа. Вы просто отбросите людей, потратите время и деньги, пытаясь остановить их, и, в конце концов, не получится. – Rottingham

+2

Вы не можете. Поскольку JavaScript работает на стороне клиента, его можно манипулировать пользователем. Например, они могут просто отключить JavaScript в своем браузере. Или они могут запускать скрипты, которые отключают ваши попытки умерить свои программы и комбинации клавиш. – Daew

ответ

1

Нет актуального решения, которое работает, чтобы остановить людей от копирования вещей, как говорили другие люди. Кроме того, если вы заставляете клавишу ALT перестать работать, люди с ограниченными возможностями больше не смогут использовать вашу страницу. Поэтому я бы сделал что-то совершенно другое: всякий раз, когда бы вы не захотели произойти, сделать невозможным чтение вашей страницы (если только человек, принимающий тест, не знает, как использовать инструменты разработчика в своем браузере).

Если мы предположим, что это ваш CSS стиль:

body { 
    user-select:none; /* try to prevent highlighting of text */ 
} 
.readable {  /* readable = contrasting colors */ 
    color:black; 
    background-color:white; 
} 
.unreadable { /* unreadable = the same color */ 
    color:white; 
    background-color:white; 
} 
.unreadable::selection {  /* for highlighted text, if user-select fails */ 
    background-color:white; 
    color:white; 
} 

Тогда вот основная читаемость изменяющих функции:

function canYouReadMe(yes) { 
    if(yes) { //we can read black on white 
     document.body.setAttribute('class','readable'); 
    } else { //we can't read white on white 
     document.body.setAttribute('class','unreadable'); 
    } 
} 

Вот JQuery для обработки управления, экрана печати и альта. Клавиша опускается вниз, вы не можете прочитать страницу. Ключ поднимается, вы можете прочитать его снова.

$(window).keydown(function(e){ 
    if (e.ctrlKey    //control key 
      || e.keyCode == 44 //print screen 
      || e.keyCode == 18 //alt key 
    ) { 
     canYouReadMe(false); 
     if(e.ctrlKey) { 
      e.preventDefault(); //stop copy-paste but not alt 
      return false; 
     } 
    } 
}); 
$(window).keyup(function(e){ 
    if (e.ctrlKey    //control key 
      || e.keyCode == 44 //print screen 
      || e.keyCode == 18 //alt key 
    ) { 
     canYouReadMe(true); 
     if(e.ctrlKey) { 
      e.preventDefault(); 
      return false; 
     } 
    } 
}); 

И еще, что ручки правой кнопкой мыши (что номер 3):

$(window).mousedown(function(e) { 
    if (e.which == 3) { 
     canYouReadMe(false); 
     e.preventDefault(); //stop the menu from appearing 
     return false; 
    } 
}); 
$(window).mouseup(function(e) { 
    if (e.which == 3) { 
     canYouReadMe(true); 
     e.preventDefault(); 
     return false; 
    } 
}); 

А вот то, что вам нужно для остановки других программ и не фокусировкой PrintScreen: ваша страница будет нечитаемым если он не находится в фокусе. Итак, если они перейдут в другое окно, они ничего не смогут увидеть. Это не позволяет им просто читать вашу страницу при вводе в другое окно.

$(window).focus(function() { 
    canYouReadMe(true); //read on focus 
}); 

$(window).blur(function() { 
    canYouReadMe(false); //unreadable when focus is lost 
}); 

Если окно фокус/размытия не удается, вы можете также посмотреть в использовании CSS, которые будут оказывать вещи только для чтения, когда в полноэкранном режиме. Я не уверен, что это выполнимо или нет.

Я не тестировал ни одно из этого - это просто моя теория, что он должен работать, с некоторыми изменениями здесь и там.

EDIT: Чтобы обратиться к людям, говорящим о источнике просмотра и т. Д .: Вы должны использовать ajax для визуализации вашего текста. Таким образом, если они отключат JavaScript, они ничего не заметят, и если они используют источник просмотра, они все равно ничего не заметят. Опять же, они могут обойти его с помощью инструментов разработчика (например, Inspect Element), но если они такие сообразительные, вы их не останавливаете.

0

Не существует технологического решения, оно слишком тяжелое или неосуществимое.

Какими традиционными методами учителя должны смягчать использование копирования? Сделайте несколько версий. Измените некоторые переменные, получите другой результат.

Возможно, у вас есть идеи?

1

Как и все предыдущие плакаты, нет способа предотвратить использование пользователями каких-либо из этих действий.

Однако вы можете отключить выделение текста с помощью css и сделать его немного более «неудобным» и могли бы так легко препятствовать нормальному ежедневному пользователю с копирования + вставки. Разумеется, опытный пользователь может обойти это, так что это тоже не является доказательством.

-webkit-touch-callout: none; 
-webkit-user-select: none; 
-khtml-user-select: none; 
-moz-user-select: none; 
-ms-user-select: none; 
user-select: none; 

Надеюсь, что это поможет!

Смежные вопросы