
最近公司在做一个内部的考试平台,说到考试网站,我们第一时间想到的就是防作弊,所以在做这个考试平台的时候,就在想应该怎么去做防作弊。
pageshow & pagehide首先想到的是两个监听函数 pageshow、pagehide:
pageshow: 当一条会话历史记录被执行的时候将会触发页面显示 (pageshow) 事件。(这包括了后退/前进按钮操作,同时也会在 onload 事件触发后初始化页面时触发)pagehide: 当浏览器从展示会话历史中的另一个页面过程中隐藏当前页面时,会向 Window 发送 pagehide 事件。例如,当用户点击浏览器的后退按钮时,在显示前一个页面之前,当前页面会接收到一个 pagehide 事件。
但是这两个事件明显不满足我的防作弊需求,因为这两个事件只能监听到考试页面是否被重新加载,并不能监听到用户是否切换了 Tab 页,或者是否最小化了浏览器。
visibilitychange其实还有一个事件能监听网页的显示和隐藏,那就是 visibilitychange:
visibilitychange: 这个事件会在页面的可见性状态发生变化时触发(例如,用户切换标签页或最小化浏览器时)。document.visibilityState: 返回当前页面的可见性状态。它有两个可能的值:'visible': 页面处于可见状态。'hidden': 页面处于不可见状态。
我觉得这个真的不错~
focus & blur另一种思路是,可以监听整个页面的focus、blur 事件,当 focus 触发的时候,说明用户目前还在这个页面中,当 blur 触发时,说明用户点击了页面以为的东西。

但是这样的话,监控的敏感度有有些高,如果考生不得不点击页面以外的地方,去关闭一些弹窗之类的操作,就会被判断成作弊。。。
全屏模式?让整个网页直接全屏,这样是不是就能避免作弊了。

这个是不是好点???哈哈哈哈哈哈。