iPad端Safari中Autodesk Viewer事件无法触发问题求助
问题:iPad Safari中Autodesk Viewer的OBJECT_TREE_CREATED_EVENT事件无响应
现象与排查
- 桌面端浏览器中,
Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT事件能正常触发处理函数;但在第9代iPad(iPadOS 18.0.1)的Safari里完全无响应 - 已确认事件绑定代码执行正常,代码如下:
viewer.addEventListener( Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT, handlerToCall );
- 通过MacBook Web Inspector排查,Autodesk相关事件断点从未触发,但DOMContentLoaded等常规事件可正常触发,排除通用事件机制问题
解决方案(尽量保留原事件绑定逻辑)
延迟绑定事件
移动端Safari的Viewer初始化节奏可能慢于桌面端,尝试在Viewer初始化后延迟绑定事件:viewer.initialize(); setTimeout(() => { viewer.addEventListener(Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT, handlerToCall); }, 500);可根据实际情况调整延迟时长,测试不同数值找到合适阈值。
依托几何加载事件触发绑定
监听Autodesk.Viewing.GEOMETRY_LOADED_EVENT(几何加载完成事件),在该事件触发后再绑定目标事件——因为几何加载完成后对象树通常已创建:viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, () => { viewer.addEventListener(Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT, handlerToCall); // 若此时对象树已存在,直接调用一次处理函数避免遗漏 if (viewer.model?.getObjectTree()) { handlerToCall(); } });主动轮询对象树状态
跳过事件监听,主动检查对象树是否创建完成,一旦就绪就执行处理函数:const checkObjectTree = () => { if (viewer.model?.getObjectTree()) { handlerToCall(); } else { requestAnimationFrame(checkObjectTree); } }; viewer.initialize(); checkObjectTree();这种方式避开移动端事件兼容性问题,同时保留原处理函数逻辑。
升级Viewer SDK版本
部分移动端兼容性问题可能在新版本中已修复,尝试升级Autodesk Viewer的SDK版本,验证是否解决事件触发异常。
内容的提问来源于stack exchange,提问作者Richard Payne
相关产品推荐
相关产品推荐

