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

ThreeJS v110的THREE.WebGLRenderer在新版桌面Safari崩溃,不升级如何修复?

适配方案

该崩溃由Safari 15桌面端内核处理WEBGL_debug_renderer_info扩展查询的逻辑bug导致,ThreeJS r110版本的WebGLRenderer初始化时会默认查询该扩展,直接触发内核崩溃。不需要升级ThreeJS版本的可行适配方案如下:

  • 方案1:全局拦截WebGL扩展查询(最优,无业务侵入)
    在引入ThreeJS资源之后、实例化THREE.WebGLRenderer之前执行以下补丁代码即可:
const originalGetExtension = WebGLRenderingContext.prototype.getExtension;
WebGLRenderingContext.prototype.getExtension = function (extName) {
  // 拦截触发崩溃的扩展查询,直接返回null
  if (extName === 'WEBGL_debug_renderer_info') return null;
  return originalGetExtension.call(this, extName);
};

该方案仅会导致ThreeJS无法读取显卡具体型号信息,不会影响任何渲染功能,适配成本最低。

  • 方案2:修改ThreeJS源码后自行托管
    如果不想修改全局WebGL原型,可以下载r110版本的ThreeJS源码,找到内部查询WEBGL_debug_renderer_info的代码段直接注释,编译后将JS资源托管到自有静态资源服务替换原有CDN资源即可,无需修改业务侧的ThreeJS调用逻辑。
  • 方案3:传入自定义canvas初始化
    实例化WebGLRenderer时主动传入提前创建的canvas元素,也可绕开崩溃逻辑,示例代码:
const customCanvas = document.createElement('canvas');
const renderer = new THREE.WebGLRenderer({
  canvas: customCanvas,
  // 可选补充参数,进一步提升兼容性
  antialias: true,
  powerPreference: 'high-performance'
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:09:04