【发布时间】:2020-09-05 04:55:48
【问题描述】:
我使用 Reactjs 开发 Forge Viewer。
第二次后,当我在 Forge Viewer 中显示绘图时,扩展程序不会加载。
未加载的扩展。
Autodesk.ViewCubeUi.
Autodesk.BimWalk.
Autodesk.Measure.
Autodesk.Section.
Autodesk.LayerManager.
在当前实现中,每次绘图文件更改时都会重新加载查看器脚本。
我使用参考实现了这个脚本。
https://github.com/outer-labs/react-forge-viewer
我应该如何解决这个问题?
错误日志(这是一个 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
代码
查看器脚本加载如下。
<ForgeViewer /> 组件显示绘图并处理查看器事件。
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
【问题讨论】:
-
你是如何注册扩展的?这部分不包含在提供的样板代码中。欢呼
-
我没有注册任何额外的扩展。我不使用无头查看器。默认加载所有扩展。
标签: javascript reactjs typescript autodesk-forge