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

Unpkg集成Mirador Viewer在existDB应用中异常问题排查求助

问题:existDB集成Mirador Viewer出现稳定性故障

我正在将XSLT生成HTML的应用迁移至existDB,需要集成Mirador Viewer。示例代码在静态HTML页面、existDB导出的静态HTML文件中均能正常运行,但在existDB应用内使用时,Viewer极不稳定:

  • 加载阶段抛出TypeError: this.gridRef.current is null错误
  • 和画布交互时触发“too much recursion”无限递归错误

混淆后的代码难以排查,求可行的解决方案。

相关代码

<div id="viewer" allowfullscreen="allowfullscreen">
<script src="https://unpkg.com/mirador@latest/dist/mirador.min.js"></script>
<div id="mirador"></div>
<script type="text/javascript">
  const mirador = Mirador.viewer({
    "id": "mirador",
    "manifests": {
      "https://iiif.lib.harvard.edu/manifests/drs:48309543": {
        "provider": "Harvard University"
      }
    },
    "windows": [
      {
        "loadedManifest": "https://iiif.lib.harvard.edu/manifests/drs:48309543",
        "canvasIndex": 2,
        "thumbnailNavigationPosition": 'far-bottom'
      }
    ]
  });
</script>
</div>

加载时错误日志

TypeError: this.gridRef.current is null
    value ThumbnailNavigation.js:35
    React 2
    unstable_runWithPriority scheduler.production.min.js:19
    React 4
    unstable_runWithPriority scheduler.production.min.js:19
    React 4
    Redux 68
    Ks createPluggableStore.js:22
    e MiradorViewer.js:20
    viewer init.js:15
    <anonymous> index:15
react-dom.production.min.js:209:194
    React 9
    unstable_runWithPriority scheduler.production.min.js:19
    React 4
    Redux 68
    Ks createPluggableStore.js:22
    e MiradorViewer.js:20
    viewer init.js:15
    <anonymous> index:15

画布交互错误日志

InternalError: too much recursion
    c getScrollParent.js:27
    G setupEventListeners.js:11
    G mirador.min.js:2  -- THIS REPEATS 123 TIMES --
react-dom.production.min.js:209:194
    React 9
        os
        payload
        gi
        Fa
        Es
        vc
        gc
        sc
        Xo
    unstable_runWithPriority scheduler.production.min.js:19
    React 5
        qo
        Xo
        Yo
        nc
        ya
    o useControlled.js:38
    we Tooltip.js:273
    current Tooltip.js:306
    (Async: setTimeout handler)
    Oe Tooltip.js:305
    React 12
        s
        p
        v
        v
        st
        it
        ct
        ht
        L
        F
        Jt
        Qt
    unstable_runWithPriority scheduler.production.min.js:19
    React 11
        Xt
        Zt
        Kt
        gt
        un
        es
        bc
        vc
        gc
        sc
        Xo
    unstable_runWithPriority scheduler.production.min.js:19
    React 2
        qo
        Xo
    W scheduler.production.min.js:17
    onmessage scheduler.production.min.js:14
    (Async: EventHandlerNonNull)
    <anonymous> scheduler.production.min.js:13
    Webpack 15
        o
        <anonymous>
        o
        <anonymous>
        o
        <anonymous>
        o
        <anonymous>
        o
        <anonymous>
        o
        <anonymous>
        <anonymous>
        <anonymous>
        <anonymous>

可行解决方案

1. 等待DOM完全加载后初始化Mirador

existDB动态渲染页面时,可能目标DOM节点还未生成就执行了Mirador初始化,导致Ref绑定失败。把初始化代码放到DOM加载完成事件中:

document.addEventListener('DOMContentLoaded', function() {
  const mirador = Mirador.viewer({
    "id": "mirador",
    "manifests": {
      "https://iiif.lib.harvard.edu/manifests/drs:48309543": {
        "provider": "Harvard University"
      }
    },
    "windows": [
      {
        "loadedManifest": "https://iiif.lib.harvard.edu/manifests/drs:48309543",
        "canvasIndex": 2,
        "thumbnailNavigationPosition": 'far-bottom'
      }
    ]
  });
});

2. 替换为指定稳定版Mirador

latest标签可能指向不稳定的开发版本,换成官方标记的稳定版(比如3.3.0):

<script src="https://unpkg.com/mirador@3.3.0/dist/mirador.min.js"></script>

3. 检查XSLT输出的DOM结构

existDB的XSLT转换可能意外修改HTML结构:

  • 自动添加嵌套元素导致#mirador容器被隐藏或未正确渲染
  • 输出未闭合标签破坏DOM完整性
    在浏览器开发者工具中对比静态HTML和existDB生成页面的DOM结构,定位差异。

4. 临时禁用缩略图导航排查

加载错误指向ThumbnailNavigation.js,先禁用缩略图导航验证问题根源:

"windows": [
  {
    "loadedManifest": "https://iiif.lib.harvard.edu/manifests/drs:48309543",
    "canvasIndex": 2,
    "thumbnailNavigationPosition": null // 禁用缩略图导航
  }
]

如果问题消失,说明是缩略图组件与existDB环境兼容性问题,可尝试升级Mirador或自定义样式修复。

5. 调整existDB的内容安全策略(CSP)

existDB可能启用了严格的CSP,限制了Mirador的脚本执行或资源加载。查看浏览器控制台的CSP报错,调整existDB配置,允许Mirador所需的资源加载和内联脚本执行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:09:15