You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安卓平板出现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:36:24