我有一个自定义扩展,它在默认查看器工具栏中添加了 3 个按钮,它们工作得很好,但现在我必须在我的应用程序中初始化两个查看器,以便将来在其中加载模型,现在我收到了这个错误:
Uncaught (in promise) Extension not found: ToolbarExtension. Has it been registered(1)?
是的,它已注册(我之前用过)。
这很好奇,因为如果我从扩展数组中删除
ToolbarExtension
并在代码中调用await viewer.loadExtension("ToolbarExtension")
,它可以工作,但我不想这样做,因为它有一个延迟执行,我想像以前一样工作
观察:只有主查看器使用扩展进行初始化,如果我删除第二个查看器初始化,错误就会消失并且可以完美运行。
我整理了以下快速测试,并且我能够在两个查看器中加载相同的扩展:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=no" />
<meta charset="utf-8">
<link rel="stylesheet" href="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/style.css">
<script src="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/viewer3D.js"></script>
</head>
<body style="margin: 0; height: 100vh;">
<div id="viewer1" style="position: absolute; left: 0; right: 0; top: 0; height: 50%;"></div>
<div id="viewer2" style="position: absolute; left: 0; right: 0; bottom: 0; height: 50%;"></div>
<script>
class MyExtension extends Autodesk.Viewing.Extension {
constructor(viewer, options) {
super(viewer, options);
}
load() {
return true;
}
unload() {
return true;
}
onToolbarCreated() {
let group = this.viewer.toolbar.getControl('my-toolbar-group');
if (!group) {
group = new Autodesk.Viewing.UI.ControlGroup('my-toolbar-group');
this.viewer.toolbar.addControl(group);
}
const button = new Autodesk.Viewing.UI.Button('my-button');
button.setToolTip('My Button');
button.onClick = () => alert('Hello World!');
group.addControl(button);
}
}
Autodesk.Viewing.theExtensionManager.registerExtension('MyExtension', MyExtension);
Autodesk.Viewing.Initializer({ env: 'Local' }, function () {
const config = {
extensions: ['MyExtension']
};
const viewer1 = new Autodesk.Viewing.GuiViewer3D(document.getElementById('viewer1'), config);
viewer1.start();
// Load some URN into viewer1
const viewer2 = new Autodesk.Viewing.GuiViewer3D(document.getElementById('viewer2'), config);
viewer2.start();
// Load some URN into viewer2
});
</script>
</body>
</html>
也许您的代码中还有其他内容导致了此问题?