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

使用pdf.js 4.4.168在Safari16.4中遇Promise.withResolvers未定义问题求助

修复Safari 16.4中PDF.js 4.4.168的Promise.withResolvers未定义错误

问题根源

你仅替换了legacy版本的pdf.worker.min.mjs,但主PDF.js库文件(如pdf.min.mjs)仍为标准版本,而报错中的Promise.withResolvers()调用大概率来自主库代码,而非worker,所以只换worker无法解决问题。

完整修复步骤

1. 替换全部legacy版本文件

从下载的pdfjs-4.4.168-legacy-dist.zip压缩包中,替换项目中所有PDF.js相关文件:

  • 主核心库:pdf.min.mjs(或未压缩的pdf.mjs)
  • Worker文件:pdf.worker.min.mjs
  • 若项目用到PDF viewer组件,同步替换viewer.min.js、viewer.css等关联文件

确保所有PDF.js依赖文件均来自legacy压缩包,而非标准版本。

2. 确认Worker路径配置

检查项目中初始化PDF.js的代码,保证Worker路径指向正确的legacy文件:

import * as pdfjsLib from './pdfjs-dist/4.4.168/legacy/pdf.min.mjs';

pdfjsLib.GlobalWorkerOptions.workerSrc = './pdfjs-dist/4.4.168/legacy/pdf.worker.min.mjs';

3. 备选:添加Polyfill兼容

如果暂时无法替换主库文件,可在PDF.js加载前手动添加Promise.withResolvers的polyfill:

// Polyfill for Promise.withResolvers
if (!Promise.withResolvers) {
  Promise.withResolvers = function () {
    let resolve, reject;
    const promise = new Promise((res, rej) => {
      resolve = res;
      reject = rej;
    });
    return { promise, resolve, reject };
  };
}

4. 排查构建工具影响

若使用Webpack、Vite等构建工具,检查是否存在tree-shaking、代码压缩导致legacy代码被覆盖的情况,确保构建时引入的是legacy路径下的PDF.js文件。

验证

完成上述操作后,在Safari 16.4中重新加载页面,确认报错消失,PDF正常渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:12:46