Javascript 在Forge Viewer中第二次加载扩展后不会加载

Javascript 在Forge Viewer中第二次加载扩展后不会加载,javascript,reactjs,typescript,autodesk-forge,Javascript,Reactjs,Typescript,Autodesk Forge,我使用Reactjs开发了Forge查看器 在第二次之后,当我在Forge Viewer中显示图形时,扩展不会加载 未加载的扩展名 Autodesk.ViewCubeUi. Autodesk.BimWalk. Autodesk.Measure. Autodesk.Section. Autodesk.LayerManager. 在当前实现中,每次图形文件更改时都会重新加载查看器脚本 我用一个引用实现了这个脚本 我应该如何解决这个问题 错误日志这是一个ViewCubeUi错误,但其他扩展也是如此

我使用Reactjs开发了Forge查看器

在第二次之后,当我在Forge Viewer中显示图形时,扩展不会加载

未加载的扩展名

Autodesk.ViewCubeUi.
Autodesk.BimWalk.
Autodesk.Measure.
Autodesk.Section.
Autodesk.LayerManager.
在当前实现中,每次图形文件更改时都会重新加载查看器脚本

我用一个引用实现了这个脚本

我应该如何解决这个问题

错误日志这是一个ViewCubeUi错误,但其他扩展也是如此

Uncaught (in promise) Error: Extension not found: Autodesk.ViewCubeUi. Has it been registered(3)?
    at VM26450 viewer3D.min.js:19
(anonymous) @ viewer3D.min.js?v=v7.18:19
Promise.then (async)
loadExtension @ viewer3D.min.js?v=v7.18:19
(anonymous) @ viewer3D.min.js?v=v7.18:24
setTimeout (async)
T.createUI @ viewer3D.min.js?v=v7.18:24
(anonymous) @ viewer3D.min.js?v=v7.18:24
(anonymous) @ viewer3D.min.js?v=v7.18:24
setTimeout (async)
(anonymous) @ viewer3D.min.js?v=v7.18:24
p @ viewer3D.min.js?v=v7.18:19
(anonymous) @ viewer3D.min.js?v=v7.18:24
l @ viewer3D.min.js?v=v7.18:24
(anonymous) @ viewer3D.min.js?v=v7.18:24
forEach.e.<computed> @ viewer3D.min.js?v=v7.18:24
x @ viewer3D.min.js?v=v7.18:24
a @ viewer3D.min.js?v=v7.18:24
Promise.then (async)
x @ viewer3D.min.js?v=v7.18:24
a @ viewer3D.min.js?v=v7.18:24
(anonymous) @ viewer3D.min.js?v=v7.18:24
(anonymous) @ viewer3D.min.js?v=v7.18:24
(anonymous) @ viewer3D.min.js?v=v7.18:24
i @ viewer3D.min.js?v=v7.18:19

密码 查看器脚本的加载方式如下所示。 组件显示图形并处理查看器事件

const version = "7.18"
const cssUrl = `https://developer.api.autodesk.com/modelderivative/v2/viewers/style.min.css?v=v${version}`
const scriptUrl = `https://developer.api.autodesk.com/modelderivative/v2/viewers/viewer3D.min.js?v=v${version}`

import React, {useState, useEffect} from 'react'

interface ScriptLoaderProps {
  url: string
  onLoad?: () => void
  onError?: () => void
}

const ScriptLoader: React.FC<ScriptLoaderProps> = ({url, onLoad, onError, children}) => {
  const [ready, setReady] = useState(false)
  useEffect(() => {
    const script = document.createElement('script')
    script.src = url
    script.async = true
    script.onload = () => {
      setReady(true)
      if(onLoad) onLoad()
    }
    if(onError) script.onerror = onError
    document.body.appendChild(script)
    return () => {
      document.body.removeChild(script)
    }
  }, [url])
  if(ready) return <>{children}</>
  return <></>
}

const Viewer = () => {
  return(
    <>
      <link rel="stylesheet" type="text/css" href={cssUrl} />
      <ScriptLoader url={scriptUrl}>
        <ForgeViewer />
      </ScriptLoader>
    </>
  )
}
Chrome 81.0.4044.138官方版本64位 查看器版本:7.18
尽量不要重新加载查看器脚本,否则您可能会遇到奇怪的冲突,或者更准确地说,根据我们的工程加载扩展和其他一些依赖项,您可能会遇到深层次的赛车情况

此问题从早期v7版本开始出现

事实上,使用自己的查看器组件并查看一个示例非常简单-在处理多个组件和重新加载时,只需使用状态控制机制redux等来检查库是否已加载/正在加载以避免冲突


或者,您可以自定义我们不完全支持的此组件,因为它是第三方,您可以在尝试加载脚本之前检查Windows.Autodesk是否已可用…

您如何注册扩展?此部分不包括在提供的样板代码中。Cheerri没有注册任何其他扩展。我不使用无头查看器。默认情况下加载所有扩展。感谢您的帮助!我确认了window.Autodesk并避免了错误!