页面加载完成后就与服务器没有联系了,你不可能继续控制这个页面,只有当页面再次提交时才能控制,如果实时性要求不高可用在第二次提交时提示考生。
一个折中的实时办法是:在考生的页面中使用ajax实时读取服务器信息,服务器消息变化后可以提示考生。
每个页面加载一个ajax定时器,异步定时查看考试是否暂停。
假如考试开关在session存放,如果时间到,管理员通过权限调整session存储的开关即可。而考卷在ajax请求时发现session中的已经关闭,返回客户端,提示用户到时,并停止。
服务器做一个返回状态的接口,客户端用ajax, 做一个DIV是整屏的, 每几秒就用学生的ID去请求服务器的接口, 如果锁定的, 就把DIV设置到顶层, 只能让他们看. 不能操作等
可以占用一个http的长连接,实现服务器push。或者使用ajax进行轮训。
push方式很时时,但是占用一个连接(一般客户端只有两个可用连接),例如webim的实现
ajax轮训依赖于客户端,对服务器也是比较消耗。
这要根据具体使用场景来评估一下
你这个是典型的comnet应用,即反向ajax,你可以找找这方面的类库来用一下,园子里有很多这样的例子
个人觉得不推荐你使用comnet技术来处理,这样子做觉得吃力不讨好,如果要这样子做,个人觉得你完全可以使用Flash或者Silverlight的Socket来处理,毕竟你的使用对象是学生群里,这个比较好统一,因为他们要在线考试,那么使用这个技术相对来说是最有保障的,因为socket技术只要客户端或者服务器端有相关的操作都会进行会话的,所以这样子处理是最好的...
当然除了这样子的方式,使用ajax技术也是可以完全做到的,不过这样子做的话,需要考虑的因素就比较多,简单说就是页面上必须有一个timer进行计时,而且还必须要相对比较短的时间和服务器进行通信,以更新客户端(考生答题情况)和服务器端的状态(考生的所有状态在服务器端都要有存储).
然后你说到暂停的操作,我觉得可以这样子来处理,考生进行考试是一个统一的时间,那么你可以在服务器端设定一个后台运行的timer,设定他在几点到几点进行计时,这个timer是作为考试的起止时间的,是不会随着考生的暂停或者其他操作而进行变更的.也就是理想状态如果考生都没有进行暂停等操作的话,服务器端的timer计时完成时就是考试结束时间...
那要如何来控制针对考生暂停考试的计时操作呢?我觉得可以这样子来操作,就是进行考试补时操作,这个所谓的补时是这样子来处理的,也就是当考生进行考试时此时服务器端的timer就开始计时了,此时更新考生的起止考试时间,然后记得把考生补时时间此时置为0,也就是考生正常考试时这个补时时间永远是0,然后如果考生客户端请求暂停考试时间的话,那此时就需要在客户端维护一个timer同时需要更新服务器端该用户的状态(置为暂停状态),这个timer作用就是记录下此时时间,然后等待考生继续进行考试,记录下此时的时间,然后把这二者的时间记录到服务器端,同时记录暂停的时间并更新到补时时间字段中,然后把考生状态置位正常状态....
然后等到服务器端主timer的时间用完时,此时查看考生状态,此时就需要查看考生的补时字段是否有相应的时间值,如果有那么就延长该考生的时间,如果没有就置考生的状态为考试结束...当然这里延长考生的考试时间我觉得你可以使用一个缓存来处理,也就是定是存储补时的一个缓存时间,然后缓存时间到后可以调用callback来更新考生的状态...不过这里还需要注意一点,就是如果在这个补时时间段中考试还需要进行考试暂停的话,个人觉得你程序可以考虑这样子的操作不被允许,如果实在需要,那这个也相对是可以处理的,那这个就是看你的处理策略了,根据你设计的处理策略就好了..操作办法都是一样的
那要看你的窗口是怎样打开的,如果是通过非模态对话框打开的是话,会得到打开窗口的句柄,你调试进去看下,就能看见里面熟悉的JavaScript函数了。想控制什么就控制什么!