考试防刷新、切屏效果实现

news/2024/7/4 9:37:38

情景

       在线考试模块这样一个需求: 避免学生用电脑查答案, 需要系统防止刷新、切屏或改变窗口大小,当达到次数后自动交卷。

实现

 1,仿刷新。

    因为浏览器都自带了刷新返回等按钮,因此只想到了弹出窗口的形式。

/*
* @param url 考试界面的链接
* @param name 新窗口的名称,没有可填空
* 属性menubar=no 新窗口隐藏菜单栏,防刷新即基本实现
*/
window.open( url, name, "menubar=no" ) 

没那么完美,鼠标点刷新按钮是实现了,但键盘快捷键的刷新未处理。接下来在防止切屏内一并处理。

 

2,防止切屏。 

         主要思路是屏蔽键盘快捷键和鼠标切换。

      2.1,屏蔽切换组合键如下:

function stopShortCutKey() {               //屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键  
  if ( (window.event.altKey) && ((window.event.keyCode == 37) ||   (window.event.keyCode == 39) ) ) { 
    alert("不准你使用ALT+方向键前进或后退网页!");
    return false;
  }
  if ((event.keyCode == 116) ||                                   //屏蔽   F5   刷新键  
      (event.keyCode == 112) ||                                   //屏蔽   F1   刷新键  
      (event.ctrlKey && event.keyCode == 82)) {                   //Ctrl   +   R  
       return false;
  }
  if ((event.ctrlKey) && (event.keyCode == 78)){ return false; //屏蔽 Ctrl+n  } if ((event.shiftKey) && (event.keyCode == 121)) { //屏蔽 shift+F10 return false; } if (window.event.srcElement.tagName == "A" && window.event.shiftKey){ return false; //屏蔽 shift 加鼠标左键新开一网页  } if ((window.event.altKey) && (window.event.keyCode == 115)) { //屏蔽Alt+F4 window.showModelessDialog("about:blank", "", "dialogWidth:1px;dialogheight:1px"); return false; } if ((window.event.altkey) && (window.event.keyCode == 27)) { alert("认真答题!"); } } 

      2.2 "屏蔽"鼠标切屏

      window系统上,win + tab 组合键属于系统级别的快捷键,无法操作。我想到了监听网页失焦事件。

var allowNum = 3; // 允许三次切屏,超过则提交
window.onblur = function() {
  if(allowNum < 1) {
    submitTest()
  }
  allowNum--;
  alert("您已切屏,超过三次自动提交试卷")
}

3, 禁止窗口大小改变

    监听窗口改变的事件如下,但由于它会默认触发onblur事件( 因为点击窗口按钮,已经在页面之外,无法监听了,所以失焦函数会触发),为防止两次触发切屏,故只用上面的函数进行监听。

window.onresize()

  

转载于:https://www.cnblogs.com/miku561/p/10480850.html


http://www.niftyadmin.cn/n/3458663.html

相关文章

Position属性四个值:static、fixed、absolute和relative的区别和用法(转自博友 Newbie_小白)...

在用CSSDIV进行布局的时候&#xff0c;一直对position的四个属性值relative,absolute,static,fixed分的不是很清楚&#xff0c;以致经常会出现让人很郁闷的结果。今天研究了一下&#xff0c;总算有所了解。在此总结一下&#xff1a; 先看下各个属性值的定义&#xff1a; 1、sta…

爬虫-第三篇-代理,cookie,验证码,线程池

图片懒加载 有些图片网站img标签用了伪src属性,在页面加载时不会一次性加载所有图片,获取图片链接时,要注意img标签的属性,如下图,属性被修改为src2 代理 在短时间内向网站发起了一个高频的请求,会产生ConectionPool的Error,连接池(http)中的资源被耗尽,可以在请求头中设置Conn…

使用ApiPost模拟发送get、post、delete、put等http请求

现在的模拟发送请求插件很多比如老外的postman等&#xff0c;但亲测咱们国内的 ApiPost 更好用一些&#xff0c;因为它不仅可以模拟发送get、post、delete、put请求&#xff0c;还可以导出文档&#xff0c;支持团队协作也是它的特色。 另外老外的思维跟我们还是有些鸿沟&#x…

爬虫-第五篇-scrapy框架初识,持久化存储,手动请求发送

准备工作 什么是框架?如何学习框架? 就是一个集成了各种功能且具有很强通用性(可以被应用在各种不同的需求中)的一个项目模板.scrapy集成了哪些功能: 高性能的数据解析操作,持久化存储操作,高性能的数据下载的操作.....环境的安装: a. pip3 install wheelb. 下载twisted http…

出来混迟早要还的,技术债Dagger2:Android篇(上)

前言 因为工作需求&#xff0c;所以最近补了补之前没了解过的Dagger2的内容&#xff0c;基础篇已经发布。接下来就是Dagger2在Android中的应用了。当然&#xff0c;和我一样刚接触Dagger2的朋友&#xff0c;可以先看一下之前的基础文章&#xff1a; 出来混迟早要还的&#xff0…

JVM学习笔记之认识JDK(一)

1. HotSpot VM&#xff1a; HotSpot VM是Sun JDK和OpenJDK中所带的虚拟机&#xff0c;也是目前使用范围最广的Java虚拟机。 什么是HotSpot VM & 深入理解Java虚拟机 JVM? 提起HotSpot VM&#xff0c;相信所有Java程序员都知道&#xff0c;它是Sun JDK和OpenJDK中所带的虚拟…

JVM学习笔记之JDK、JRE、JVM的关系(二)

JDK&#xff08;Java Development Kit&#xff09;是针对Java开发员的产品&#xff0c;是整个Java的核心&#xff0c;包括了Java运行环境JRE、Java工具和Java基础类库。Java Runtime Environment&#xff08;JRE&#xff09;是运行JAVA程序所必须的环境的集合&#xff0c;包含J…

开发函数计算的正确姿势——运行 Selenium Java

2019独角兽企业重金招聘Python工程师标准>>> 前言 首先介绍下在本文出现的几个比较重要的概念&#xff1a; 函数计算&#xff08;Function Compute&#xff09;: 函数计算是一个事件驱动的服务&#xff0c;通过函数计算&#xff0c;用户无需管理服务器等运行情况&am…