Sakula's Studio.

关于在线考试离开次数去除与刷学习记录

Word count: 724Reading time: 2 min
2020/04/15 Share

关于在线考试离开次数去除与刷学习记录

在线考试离开次数去除

在线网页上的考试为了防止作弊 ,都会加上离开次数记录功能

为了去除他 ,我们应该首先考虑如何切除网页,有鼠标点击,快捷键

考试离开次数的记录是通过失去鼠标焦点的记录,或者监控组合键的时候而计数,再提交到服务器

既然知道了它的原理,就有办法去除

但是考虑到网页开发者的具体记录方法未知,我就把方法一个个列出来

有什么不对的欢迎指正

首先是解除切屏与快捷键

1
2
//解除切屏限制
window.onmouseleave = window.onblur = window.onmouseout = document.onmouseleave = document.onblur = document.onmouseout = document.body.onmouseleave = document.body.onblur = document.body.onmouseout = onmouseleave = onblur = onmouseout = null;
1
2
//解除快捷键操作屏蔽
window.onkeyup = window.onkeydown = window.onKeyPress = document.onkeyup = document.onkeydown = document.onKeyPress = document.body.onkeyup = document.body.onkeydown = document.body.onKeyPress = onkeyup = onkeydown = onKeyPress = null;

如果你没有脚本做题,想百度的话下面是解除复制

1
2
//解除复制粘贴限制
window.oncopy = window.onpaste = document.oncopy = document.onpaste = document.body.oncopy = document.body.onpaste = oncopy = onpaste = null;

以上的切屏与快捷键解除同样适用看网课时鼠标离开网页就暂停的问题

至于记录离开次数问题

是通过Document.visibilityState实现

它的状态有四种

visible

hidden

prerender

unloaded

当你的界面不可见时,这个值就会改变

所以当你的visibilityState的值由visible变成hidden,再成hidden变成visible时就能知道你离开了再回来,甚至可以获取两次时间差得到你离开的时间

我一开始想的是用计时器

1
2
setInterval(function(){
Document.visibilityState==='visible';},1);

想了一会儿,发现不显示,何不直接把这个值设置成不可修改呢

刚好就有这么一个方法Object.freeze();

被传入的值将无法改变

1
Object.freeze(Document.visibilityState);

在经历了无数此失败后,我决定放弃之时突然想到了办法

直接调取控制台

Elements下的Event Listeners下删除对应事件即可

这里已学习通的网课视频为例

找到mouseout事件,这个事件记录的是鼠标失去焦点,即鼠标离开该网页,点开这个事件

再点击Remove即可删除事件,也就无法记录用户是否离开(果然还是得暴力!)

至于刷学习记录

那就用js自动刷新就行

1
2
3
4
5
function myrefresh()
{
window.location.reload();
}
setTimeout('myrefresh()',1000);

后面的1000为毫秒数,可自定义数字实现隔多少时间自动刷新界面

这样就能刷学习记录了

CATALOG
  1. 1. 关于在线考试离开次数去除与刷学习记录
  2. 2. 在线考试离开次数去除