7.40.0版本Autodesk Viewer销毁时控制台报错(禁用加载spinner场景)
Autodesk Viewer 7.40.0 禁用加载spinner后销毁流程报错的解决方案
问题触发逻辑
该控制台报错是7.40.0版本的框架兼容缺陷,完整触发链路为:
- 初始化Viewer时配置
disabledSpinner = true参数 - 该配置会直接跳过Spinner组件的
createDom方法执行,spinner对应的DOM元素从未被创建,实例上的domElement属性始终为undefined - 执行Viewer销毁流程时,框架未对spinner的属性做存在性判断,直接尝试访问
domElement执行DOM移除操作,最终触发空值访问的控制台报错
可落地解决方法
临时兼容方案(无需升级依赖)
- 调用Viewer销毁方法
tearDown()前,对spinner实例的空属性做兜底处理,避免空值访问:// 执行销毁逻辑前运行 const spinner = viewer.loadingSpin if (spinner && spinner.domElement === undefined) { // 给未创建DOM的spinner补上空占位元素,执行完销毁逻辑后不会对页面造成任何影响 spinner.domElement = document.createElement('div') spinner.domElement.remove() } viewer.tearDown() - 覆写spinner的原生销毁方法,跳过无DOM场景下的销毁逻辑:
// Viewer初始化完成后执行一次 const spinner = viewer.loadingSpin const originalDestroy = spinner.destroy.bind(spinner) spinner.destroy = () => { // 未完成DOM创建时直接终止销毁流程,不做DOM移除操作 if (!spinner.domElement) return originalDestroy() }
配置替代方案(实现同等禁用效果)
如果不需要修改Viewer底层逻辑,仅需实现spinner视觉隐藏的效果,可替换原有的disabledSpinner = true配置:
- 移除初始化参数里的
disabledSpinner = true配置 - 等Viewer初始化完成、spinner的DOM元素正常挂载后,直接给spinner容器加上隐藏样式:
该方式会正常走完spinner的DOM创建全流程,销毁流程可以正常访问// Viewer初始化完成回调中执行 viewer.loadingSpin.domElement.style.display = 'none'domElement属性,不会触发空值报错,视觉效果与直接禁用spinner完全一致。
根源修复方案
该问题为7.40.0版本的已知缺陷,Autodesk官方在7.41.0及以上版本中已经做了逻辑兼容:销毁流程会先判断spinner的domElement是否存在,不存在时直接跳过DOM移除步骤,从根源上避免空值报错。项目依赖允许的情况下,直接将Viewer版本升级到7.41.0及以上版本即可彻底解决该问题。
内容的提问来源于stack exchange,提问作者Dawe
相关产品推荐
相关产品推荐

