Javascript 如何禁用浏览器功能和快捷键进行全屏在线考试?
我不熟悉在线考试系统。我想进行一个安全的环境,用户将无法欺骗在线考试 请帮忙做这个 我将Javascript 如何禁用浏览器功能和快捷键进行全屏在线考试?,javascript,php,jquery,twitter-bootstrap,codeigniter,Javascript,Php,Jquery,Twitter Bootstrap,Codeigniter,我不熟悉在线考试系统。我想进行一个安全的环境,用户将无法欺骗在线考试 请帮忙做这个 我将PHP与Codeigniter框架一起用于后端和引导,JS和JQuery用于用户端或前端 我已经创建了一个考试模块,它可以很好地以直线方式工作。但我想限制用户使用错误的方法告诉我最好的方法,或者建议任何我可以获得详细信息的链接 这是我的assessment.php视图文件 <?php $temp = ""; $sr_no = 0; $assessment = $respo
PHP
与Codeigniter
框架一起用于后端和引导,JS和JQuery用于用户端或前端
我已经创建了一个考试模块,它可以很好地以直线方式工作。但我想限制用户使用错误的方法告诉我最好的方法,或者建议任何我可以获得详细信息的链接
这是我的assessment.php
视图文件
<?php
$temp = "";
$sr_no = 0;
$assessment = $response['assessment'];
$test_time = $this->session->userdata('test_time') * 60;
$questions = $response['questions'];
$total_que = count($questions);
$i = $que_no - 1;
$question = $questions[$i];
$sr_no++;
$temp.="<div class='form-group'><input type='hidden' name='que_id' value='" . $question['que_id'] . "'>";
if ($total_que == $que_no) {
$i = $que_no - 1;
$temp.="<input type='hidden' name='que_no' value='$i'>";
} else {
$temp.="<input type='hidden' name='que_no' value='$que_no'>";
}
$temp.="<label class='col-md-2'>Que. $que_no)</label>
<label class='col-md-10'>" . $question['que_dscp'] . "</label>";
if ($question['que_type'] == "d") {
$temp.="<div class='col-lg-9 bottom'>";
if (isset($question['selected_options'])) {
$temp.="<textarea style='height: 100px;' disabled name='ans_" . $question['que_id'] . "[]' class='form-control'>" . $question['selected_options'][0] . "</textarea>";
} else {
$temp.="<textarea style='height: 100px;' name='ans_" . $question['que_id'] . "[]' class='form-control'></textarea>";
}
$temp.="</div>";
} else {
foreach ($question['options'] as $option) {
$temp.="<div class='col-lg-9 bottom'>
<div class='input-group'>
<div class='input-group-addon'>";
if ($question['que_type'] == "ma") {
if (isset($question['selected_options'])) {
if (in_array($option['option_id'], $question['selected_options'])) {
$temp.="<input type='checkbox' checked disabled >";
} else {
$temp.="<input type='checkbox' disabled >";
}
} else {
$temp.="<input type='checkbox' name='ans_" . $question['que_id'] . "[]' value='" . $option['option_id'] . "'>";
}
} else if ($question['que_type'] == "sa") {
if (isset($question['selected_options'])) {
if (in_array($option['option_id'], $question['selected_options'])) {
$temp.="<input type='radio' checked disabled >";
} else {
$temp.="<input type='radio' disabled >";
}
} else {
$temp.="<input type='radio' name='ans_" . $question['que_id'] . "[]' value='" . $option['option_id'] . "'>";
}
}
$temp.="</div>
<input type='text' readonly value='" . $option['option_dscp'] . "' class='form-control'>
</div>
</div>";
}
}
$temp.="</div>";
$temp1 = "";
$sr_no = 0;
foreach ($questions as $question1) {
$sr_no++;
$temp1.="<a href='" . base_url() . "user/assessment/index/" . $assessment['test_id'] . "/$sr_no' class='btn btn-info'>$sr_no</a> ";
}
?>
<script type="text/javascript" src="<?php echo base_url(); ?>resource/js/TimeCircles.js"></script>
<link href="<?php echo base_url(); ?>resource/css/TimeCircles.css" rel="stylesheet">
<div class="container">
<div class="page-header center">
<h1><?php echo $assessment['test_name']; ?> <small><?php echo $title; ?> </small></h1>
</div>
<?php $this->load->view('alert'); ?>
<div class="panel panel-default col-md-4" style="padding: 0;">
<!-- Default panel contents -->
<div class="panel-heading">Questions Navigation</div>
<div class="panel-body" >
<?php echo "$temp1"; ?>
</div>
<div id="test_time" data-timer="<?php echo "$test_time"; ?>"></div>
</div>
<div class="panel panel-default col-md-8" style="padding: 0;">
<!-- Default panel contents -->
<div class="panel-heading">Assessment Questions</div>
<div class="panel-body" >
<?php echo validation_errors(); ?>
<form id="signupform" action="<?php echo base_url(); ?>user/assessment/submit" class="form-horizontal" method="POST">
<input type="hidden" name='test_id' value='<?php echo $assessment['test_id']; ?>'>
<input type="hidden" name='user_id' value='<?php echo $this->session->userdata('user_id'); ?>'>
<?php echo "$temp"; ?>
<div class="form-group">
<!-- Button -->
<div class="col-md-offset-6 col-md-6">
<?php
if ($que_no == 1) {
?>
<a href="#" disabled class='btn btn-danger'>Previous</a>
<?php
} else {
?>
<a href="<?php echo base_url(); ?>user/assessment/index/<?php echo $assessment['test_id']; ?>/<?php echo ($que_no - 1); ?>" class='btn btn-info'>Previous</a>
<?php
}
if (isset($question['selected_options'])) {
?>
<button id="btn-signup" disabled type="submit" class="btn btn-danger"><i class="icon-hand-right"></i>   Save</button>
<?php
} else {
?>
<button id="btn-signup" type="submit" class="btn btn-info"><i class="icon-hand-right"></i>   Save</button>
<?php
}
if ($total_que == $que_no) {
?>
<a href="#" disabled class='btn btn-danger'>Next</a>
<?php
} else {
?>
<a href="<?php echo base_url(); ?>user/assessment/index/<?php echo $assessment['test_id']; ?>/<?php echo ($que_no + 1); ?>" class='btn btn-info'>Next</a>
<?php
}
?>
</div>
</div>
<input type="hidden" id="time_taken" name="time_taken" >
<div id="Countdown" style="width: 50%;"></div>
</form>
<a href="<?php echo base_url(); ?>user/assessment/solved/<?php echo $assessment['test_id']; ?>/<?php echo $this->session->userdata('user_id'); ?>" class='btn btn-info'>Finish Test</a>
</div>
</div>
</div>
<script>
$("#test_time").TimeCircles();
$("#Countdown").TimeCircles({
"animation": "smooth",
"bg_width": 0.8,
"fg_width": 0.1,
"circle_bg_color": "#60686F",
"time": {
"Days": {
"text": "Days",
"color": "#FFCC66",
"show": false
},
"Hours": {
"text": "Hours",
"color": "#99CCFF",
"show": false
},
"Minutes": {
"text": "Minutes",
"color": "#BBFFBB",
"show": true
},
"Seconds": {
"text": "Seconds",
"color": "#FF9999",
"show": true
}
}
});
$("#btn-signup").click(function() {
$("#time_taken").val($("#Countdown").TimeCircles().getTime());
});
</script>
<script type="text/javascript">
setInterval(ajaxCall, 1000); //300000 MS == 5 minutes
function ajaxCall() {
var test_time=$("#test_time").TimeCircles().getTime();
if(test_time >= 0){
$.post("<?php echo base_url(); ?>user/assessment/set_test_time", { test_time : test_time }, function(data, status) {
});
}else{
$.get("<?php echo base_url(); ?>user/assessment/solved/<?php echo $assessment['test_id']; ?>/<?php echo $this->session->userdata('user_id'); ?>",function(data, status) {
location.reload();
});
}
}
</script>
<script type="text/javascript">
$(function () {
$(document).bind('contextmenu', function (e) {
e.preventDefault();
});
});
function disableF5(e) { if ((e.which || e.keyCode) == 116 ||(e.which || e.keyCode)==8) e.preventDefault(); };
$(document).on("keydown", disableF5);
</script>
这可能对你有所帮助, 您可以抑制一些可能对您有部分帮助的按键按下事件,但无法禁用所有事件
window.addEventListener('keydown', function (event) {
// if the keyCode is 16 ( shift key was pressed )
// Here you can specify which key events you want to disable
if ((event.which || event.keyCode) === 16) {
// prevent default behaviour
event.preventDefault();
// Few Browser also need return false, to disable keydown events
return false;
}
});
对于有限的浏览器功能, 您可以使用Javascript的
窗口。打开函数,它需要某些参数。例如,看看下面
如果您查看第三个参数
,它会执行您正在寻找的技巧,它会禁用工具栏
和所有这些东西
window.open('exampage.html','some_name_for_this_window','titlebar=no,toolbar=no,menubar=no,width=400,height=350');
看看Mozilla,您还可以禁用或启用哪些其他功能。它可能会帮助你
在用户点击和交互的后端,您有codeigniter的会话
库来处理该问题您绝对无法将某人限制在非您控制的位置。
不管你对我的浏览器,甚至是我的操作系统做了什么,我都可以使用第二台电脑,或是我的手机,或是放着一本书,或是一张纸,或是一个懂东西的朋友
检测这种情况的唯一方法是让摄像机全程拍摄用户。
除此之外,你还必须用相机拍摄屏幕,而不是通过屏幕录像机,因为否则我可能只会使用虚拟机进行考试,其中浏览器一直处于全屏状态,但我可以在虚拟机上按alt Tab键,做任何我想做的事,而屏幕录像机只会看到虚拟机的内部
因此,您实际上无法限制用户-您唯一可以尝试的就是监视他们。
这将需要至少一个麦克风和两个摄像头,可能更多——一个用来拍摄屏幕(这样你以后就能真正识别出什么东西),其余的用来拍摄用户和他的整个可能视野(别忘了天花板,可能有文字或其他东西)。当然,麦克风是为了确保用户在考试期间没有声音输入,这也意味着他们不能戴耳机,否则他们可能会使用一些基于声音的接口。
例如,我想象一个服务,在通过热键激活时,它打开一个不可见的浏览器窗口,捕获您的键盘输入,在点击回车键时进行谷歌搜索,让您通过箭头键/Return/Tab/Backspace/Esc导航,并向您读取您“选择”的任何文本。
我相信在OS X上,人们只需要找到一种让windows不可见的方法,然后他们就可以激活Voice over,将起始页设置为Google,并使用Automator创建一个服务,打开一个新的浏览器窗口(不可见),然后他们可以为其分配一个热键。
此外,所有记录都应实时传输,否则用户有机会篡改它们
现在我写了这篇文章,我意识到这可能更像是一个问题。我有一个类似的问题,已经结束了。经过一些在线搜索,我们发现了这个叫做的令人惊叹的软件,它目前适用于windows和mac操作系统。基于Firefox/gecko引擎构建,它将帮助您禁用键盘快捷键,并禁止用户使用任何其他应用程序
这适用于Standalone web应用程序。请检查这是否符合您的要求。您无法可靠地禁用这些密钥。我是否可以使用其他选项/方法?
window.open('exampage.html','some_name_for_this_window','titlebar=no,toolbar=no,menubar=no,width=400,height=350');