在线考试系统早期普遍采用Flash技术实现试卷音频播放、屏幕录制与防切屏监控,而当前主流浏览器已经彻底停止对Flash的支持。当考生使用Chrome或Edge新版本打开这类系统时,原本的播放模块无法加载,页面提示缺少插件。要解决这一问题,核心思路是从架构层面把Flash播放切换为HTML5播放,或者在受控环境下临时放行Flash进入考试。下面分别讨论具体的技术切换路径与操作步骤。

一、从系统后台将播放内核切换为HTML5
多数在线考试系统提供播放引擎的配置项,管理员登录后台后,应在「系统设置」或「试卷参数」中找到媒体播放方式。传统配置值为flash,将其修改为html5即可让前端使用原生标签渲染音频与视频。这种切换不需要考生安装任何插件,兼容性最好,也符合浏览器安全策略。
前端代码层面,原Flash播放器通常被一段外部swf引用,切换后应当替换为如下结构。注意这里的<video>标签名在讨论时必须转义,而在代码块内部也应转义为<video>以防止解析错误。
<video controls autoplay id="examAudio"> <source src="/upload/exam_2024.mp3" type="audio/mpeg"> 您的浏览器不支持HTML5音频播放 </video>
切换为HTML5后,还需要在JavaScript中调用play()方法确保自动播放策略被满足。由于浏览器禁止带声音的自动播放,考试系统应在用户点击「开始答题」按钮后再执行播放,避免被拦截。相比Flash,HTML5播放器占用资源更低,也不会触发浏览器的弃用警告。
二、浏览器端临时允许Flash进入考试的操作
如果在线考试系统年代久远,源码中强耦合了Flash的ExternalInterface通信,短期内无法重构,则只能让考生在本地浏览器中手动放行Flash。以Edge浏览器为例,在地址栏输入edge://settings/content/flash已不可用的新版本中,需借助IE模式。管理员可将考试域名加入企业策略的IE兼容列表,考生右击页面选择「在Internet Explorer模式下重新加载」即可切换进入旧系统。
在IE模式下,还需在控制面板中打开Flash Player项目,切换到「全局安全设置」将考试系统网址加入允许名单。此时原页面的swf文件能够加载,考生正常看到Flash播放条。但这种方案仅适合内网或统一管控的机房,公网环境极不推荐,因为Flash已无安全补丁。
// 检测当前是否IE模式并可调用Flash
function checkFlash() {
try {
var f = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
return true;
} catch (e) {
return false;
}
}
if (!checkFlash()) {
alert('请切换至IE模式并允许Flash进入考试');
}
从运维角度看,临时允许Flash属于权宜之计。每次浏览器升级都可能再次阻断,考务人员必须提前在考试机上做完策略配置。我们建议同时准备HTML5备用入口,当Flash检测失败时自动跳转,保障考生不因插件问题无法进入。
三、混合模式下音视频与防作弊模块的切换实践
复杂的在线考试系统不仅播放试卷语音,还用Flash捕获摄像头做监考。全部切到HTML5时,应使用navigator.mediaDevices.getUserMedia替代Flash的摄像头调用。后端接收Blob流进行抽帧比对。这样整个监控链路脱离Flash,部署更简洁。
若必须保留部分Flash监考,可采用混合嵌入:外层页面用HTML5播放试题音频,内联一个仅负责摄像的Flash小窗。此时要注意跨域传递参数需用postMessage,而非旧版Flash的容器直接赋值。下方代码展示父页面向Flash发送切换指令的写法。
var swf = document.getElementById('monitorSwf');
swf.postMessage('mode=html5_audio', '*');
// 监听Flash回传状态
window.addEventListener('message', function(e) {
if (e.data === 'flash_ready') {
console.log('Flash监考模块已就绪');
}
});
实际操作时,考务端应提供「切换进入」指引图,明确先点开始考试、再允许摄像头、最后确认音频来自HTML5播放器。通过这种混合方案,既能渐进式去Flash,又能在过渡期维持原有防作弊强度。长远来看,彻底使用HTML5的MediaRecorder与WebRTC才是稳定之道,也能让在线考试系统在任何现代设备平滑运行。