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

如何向受权限保护的Universal Viewer添加IIIF Manifest?

在Universal Viewer中加载需授权验证的IIIF Manifest

针对你提到的两种需求,这里提供可行的实现方案:

一、直接传入已获取的Manifest数据

目前Universal Viewer的init方法原生不支持直接传入Manifest JSON数据的参数,但可以通过拦截Manifest请求的方式来实现。当UV尝试请求指定的Manifest URL时,直接返回你已提前获取的本地数据,无需发起真实网络请求:

import { init } from 'universalviewer';

// 提前获取合法的Manifest数据
const myManifestData = await getManifest(myManifestUrl);

// 拦截全局fetch请求,返回本地Manifest数据
const originalFetch = window.fetch;
window.fetch = async (url, options) => {
  if (url === myManifestUrl) {
    return new Response(JSON.stringify(myManifestData), {
      headers: { 'Content-Type': 'application/json' }
    });
  }
  // 其他请求保持原逻辑
  return originalFetch(url, options);
};

// 正常初始化UV,传入原Manifest URL
init('uv-viewer', {
  iiifManifestId: myManifestUrl
});

二、为请求添加授权头

Universal Viewer没有内置类似Mirador的请求预处理器配置,但可以通过全局拦截fetch请求,为IIIF相关请求自动添加授权头:

import { init } from 'universalviewer';

// 拦截全局fetch,为目标请求添加授权头
const originalFetch = window.fetch;
window.fetch = async (url, options) => {
  // 根据实际场景匹配IIIF请求(比如Manifest、Canvas资源等)
  const isIiifRequest = url === myManifestUrl || url.includes('/iiif/');
  
  if (isIiifRequest) {
    return originalFetch(url, {
      ...options,
      headers: {
        ...options?.headers,
        authorization: `Bearer ${getToken()}`
      }
    });
  }
  
  return originalFetch(url, options);
};

// 初始化UV
init('uv-viewer', {
  iiifManifestId: myManifestUrl
});

另外你提到的项目Issue #43确实涉及授权相关的功能优化,后续版本可能会提供更原生的配置方式,若有需要可以关注其进展。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:26:13