시험, 해설보기 화면에 복사, 붙여넣기, 잘라내기, 검색, 캡쳐 등 부정행위에 사용되는 키 입력을 막는 javascript 기능을 추가하였다. js로 키입력을 제어하는 것은 처음인데, 어떤 것은 쉬웠고 어떤 것은 꽤 헤매서 메모해두려고 한다.
// 전체 코드
<script type="text/javascript">
$( document ).ready(function() {
document.oncontextmenu = new Function("return false"); // 오른쪽 클릭 금지
const preventedKeys = [67, 118, 86, 18, 70, 44, 88, 80];
// 67=c(ctrl+c 복사방지), 118 = f7(텍스트커서), 86 = v(ctrl+v 붙여넣기 방지), 18 = Alt,
// 70 = f(검색방지), 44=print screen, 88=x (ctrl+x 잘라내기 방지), 80 = p(ctrl+p 프린트 방지)
$(document).keydown(function(event) {
console.log(event.keyCode);
if(event.keyCode===17) { // ctrl pressed
event.preventDefault();
return false;
} else if(event.ctrlKey && (preventedKeys.indexOf(event.keyCode)!==-1)) {
event.preventDefault();
return false;
}
})
$(document).keyup(function(event) {
if (event.keyCode == 44) {
setTimeout(
copyToClipboard(),
1000
);
}
})
// screen 캡처 대신 들어갈 텍스트
const copyToClipboard = () => {
var textToCopy = "시험 내용은 캡쳐할 수 없습니다.";
navigator.clipboard.writeText(textToCopy);
}
});
</script>
document.oncontextmenu = new Function("return false"); // 오른쪽 클릭 금지
event.key
= 텍스트값으로 들어옴event.keyCode
= 숫자값으로 들어옴event.ctrlKey
= 컨트롤 키와 함께 눌렸는지 여부를 boolean으로 반환event.altKey
= 알트 키와 함께 눌렸는지 여부를 boolean으로 반환print screen
키입력은 keydown에서는 적용 안되고 keyup
에서만 적용되는 문제 $(document).keyup(function(event) {
if (event.keyCode == 44) {
setTimeout(
copyToClipboard(),
1000
);
}
})
// screen 캡처 대신 들어갈 텍스트
const copyToClipboard = () => {
var textToCopy = "시험 내용은 캡쳐할 수 없습니다.";
navigator.clipboard.writeText(textToCopy);
}