最近在做一个考试系统,客户要求考试页面打开后需要全屏显示,并且除本页面外不能进行其他操作,我查了一些相关资料了解到,利用Javascript并不能真正屏蔽掉ALT+TAB键,因为这是系统级快捷键,所以我使用了其他方法进行处理,当窗口失去焦点时自动触发窗口关闭事件,然后再询问用户是提交并完成考试还是取消关闭,通过这个方法初步达到了禁止用户切换窗口的操作,具体代码如下:
aaa.html
<script type="text/javascript"> var win; function ope(){ //打开窗口,'fullscreen'控制新窗口全屏显示 win = window.open('bbb.jsp','www_loveme_lingd_net','fullscreen'); } </script> <input type="BUTTON" name="FullScreen" value="全屏显示" onClick="ope()">
?
bbb.html
<script type="text/javascript"> //失去焦点后调用的函数 function c(){ window.close(); } //为窗口注册失去焦点事件 window.onblur = c; //当关闭窗口时提示是否提交考试 window.onbeforeunload = function() { return "当前数据还没有保存,关闭、刷新或切换窗口会自动完成考试,是否继续?"; } //窗口关闭后给出提示 window.onunload = function() { alert("已成功提交考试!"); } //屏蔽鼠标右键 function document.oncontextmenu() { event.returnValue=false; } //屏蔽F1帮助 function window.onhelp() { return false; } //屏蔽其他功能键 function document.onkeydown() { var k = window.event.keyCode; if (k == 116)//屏蔽 F5 刷新键 { window.event.keyCode = 0; window.event.returnValue = false; } if (window.event.ctrlKey && k == 82)//Ctrl + R window.event.returnValue= false; if (window.event.ctrlKey && k == 78)//屏蔽Ctrl+n window.event.returnValue = false; if (window.event.ctrlKey && k == 87)//屏蔽Ctrl+w window.event.returnValue = false; if (event.shiftKey && k==121)//屏蔽 shift+F10 window.event.returnValue = false; if (window.event.srcElement.tagName == "A" && window.event.shiftKey) window.event.returnValue = false;//屏蔽 shift 加鼠标左键新开一网页 if (window.event.altKey && k == 115)//屏蔽Alt+F4 { window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px"); return false; } if (window.event.altKey && (k == 37 || //屏蔽 Alt+方向键 ← k == 39)) //屏蔽 Alt+ 方向键→ { alert("不准你使用ALT+方向键前进或后退网页!"); event.returnValue=false; } } </script> <body > <h1>考试窗口</h1> </body> Hello
?在实现时也遇到了一些问题,比如在JSP页面中,有些IE就无法全屏显示,有可能是IE版本的问题。