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

Forge Viewer 7.88版本出现glrenderer读取null属性错误求助

Forge Viewer 7.88+ 修复 TypeError: Cannot read properties of null (reading 'glrenderer') 问题

问题描述

升级到Forge Viewer 7.88版本后,出现以下报错:

  • TypeError: Cannot read properties of null (reading 'glrenderer')
  • TypeError: Cannot read property 'glrenderer' of null

错误触发于MediaQueryList.onPixelRatioChanged,完整堆栈信息:

TypeError: Cannot read properties of null (reading 'glrenderer')
    at MediaQueryList.onPixelRatioChanged (https://developer.api.autodesk.com/modelderivative/v2/viewers/7.88.0/viewer3D.min.js:18:363918)
    at R.invokeTask (https://<sub-domain>.<domain>.ch/polyfills.b7a09e8149b912e2.js:1:37636)
    at Object.onInvokeTask (https://<sub-domain>.<domain>.ch/main.44847181a35edb80.js:1:1896856)
    at R.invokeTask (https://<sub-domain>.<domain>.ch/polyfills.b7a09e8149b912e2.js:1:37557)
    at fe.runTask (https://<sub-domain>.<domain>.ch/polyfills.b7a09e8149b912e2.js:1:32977)
    at _.invokeTask [as invoke] (https://<sub-domain>.<domain>.ch/polyfills.b7a09e8149b912e2.js:1:38695)
    at M (https://<sub-domain>.<domain>.ch/polyfills.b7a09e8149b912e2.js:1:51451)
    at G (https://<sub-domain>.<domain>.ch/polyfills.b7a09e8149b912e2.js:1:51759)
    at MediaQueryList.he (https://<sub-domain>.<domain>.ch/polyfills.b7a09e8149b912e2.js:1:52042)

问题原因

该错误是因为Viewer的像素比例监听回调在glrenderer实例已销毁后仍被触发,大概率是7.88版本的Viewer在资源回收逻辑上存在疏漏,导致MediaQuery的事件监听器未被正确清理。

修复方案

1. 手动完善Viewer销毁流程

在销毁Viewer时,执行完整的清理步骤,包括移除自定义事件监听、调用官方销毁方法,额外清理MediaQuery相关监听:

// 假设viewer是你的Viewer实例对象
if (viewer) {
    // 移除所有你添加的自定义事件监听
    viewer.removeEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, yourGeometryLoadedHandler);
    viewer.removeEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT, yourSelectionChangedHandler);
    // 这里继续移除其他你绑定的事件

    // 调用Viewer官方销毁方法
    viewer.finish();
    viewer = null;

    // 临时修复:手动清理像素比例变化的监听
    const mql = window.matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`);
    if (mql && mql.onPixelRatioChanged) {
        mql.removeEventListener('change', mql.onPixelRatioChanged);
    }
}

2. 升级到Viewer最新稳定版本

Autodesk后续版本大概率会修复这个资源泄漏问题,直接升级到7.88之后的版本(比如7.90及以上),可以先查看官方更新日志确认修复情况。

3. 优化单页应用的Viewer生命周期管理

如果是单页应用场景,在页面切换、组件卸载前提前销毁Viewer,避免在Viewer实例已回收后触发浏览器像素比例变化(比如窗口缩放、显示器分辨率调整)。

内容的提问来源于stack exchange,提问作者heaxyh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:44:55