使用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
相关产品推荐
相关产品推荐

