安卓平板出现TypeError: Cannot read properties of null (reading 'getTracks')但代码正常运行
问题分析与解决
首先,报错的直接原因很明确:在安卓平板的部分场景下,videoScan元素的srcObject是null,这时候直接调用stream.getTracks()就会触发Cannot read properties of null的错误。
为什么功能还能正常?大概率是这段代码被重复执行了:第一次执行时srcObject有值,流已经被正确停止;第二次执行时srcObject已经是null,虽然报错,但实际要完成的“停止流”操作已经做完,所以你觉得功能没受影响。
至于加try/catch后代码停止工作,应该是你没在catch块里保留后续的必要逻辑(比如videoElem.srcObject = null),或者try块里的错误中断了整个流程,导致本该执行的清理步骤没跑。
修复代码
直接给stream加非空判断,从根源避免报错:
const videoElem = document.getElementById("videoScan"); const stream = videoElem.srcObject; // 复用已获取的元素,无需重复查询DOM if (stream) { // 先判断stream是否存在,再执行后续操作 const tracks = stream.getTracks(); tracks.forEach(track => track.stop()); } videoElem.srcObject = null; // 不管stream是否存在,最后统一置空保证状态一致
补充说明
- 重复调用
document.getElementById("videoScan")没必要,复用前面的videoElem可减少DOM查询开销。 - 即使
stream是null,设置srcObject = null也不会有问题,相当于做一次状态兜底。 - 如果之前加
try/catch时把videoElem.srcObject = null放在了try块里,报错后这一步就不会执行,可能导致后续逻辑异常,这就是“代码停止工作”的核心原因。
内容的提问来源于stack exchange,提问作者ElFabinou
相关产品推荐
相关产品推荐

