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

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等常规事件可正常触发,排除通用事件机制问题

解决方案(尽量保留原事件绑定逻辑)

  1. 延迟绑定事件
    移动端Safari的Viewer初始化节奏可能慢于桌面端,尝试在Viewer初始化后延迟绑定事件:

    viewer.initialize();
    setTimeout(() => {
        viewer.addEventListener(Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT, handlerToCall);
    }, 500);
    

    可根据实际情况调整延迟时长,测试不同数值找到合适阈值。

  2. 依托几何加载事件触发绑定
    监听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();
        }
    });
    
  3. 主动轮询对象树状态
    跳过事件监听,主动检查对象树是否创建完成,一旦就绪就执行处理函数:

    const checkObjectTree = () => {
        if (viewer.model?.getObjectTree()) {
            handlerToCall();
        } else {
            requestAnimationFrame(checkObjectTree);
        }
    };
    viewer.initialize();
    checkObjectTree();
    

    这种方式避开移动端事件兼容性问题,同时保留原处理函数逻辑。

  4. 升级Viewer SDK版本
    部分移动端兼容性问题可能在新版本中已修复,尝试升级Autodesk Viewer的SDK版本,验证是否解决事件触发异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:08:14