初始化PDF.JS时出现Uncaught ReferenceError: PDFJS未定义问题求助
搞定 "Uncaught ReferenceError: PDFJS is not defined" 问题
嘿,我来帮你拆解下这个问题——这种命名空间找不到的错误在PDF.js部署里挺常见的,咱们按优先级一步步排查:
1. 先查PDF.js的命名空间是不是搞错了
这是最容易踩的坑!新版本的PDF.js已经把全局命名空间从PDFJS改成pdfjsLib了。如果你用的是近年更新的PDF.js版本,却还在写PDFJS.getDocument(...),肯定会报错。
举个例子,旧写法要改成这样:
// 旧写法(过时了) // PDFJS.getDocument('your-file.pdf').promise.then(...) // 新写法(适配新版本) pdfjsLib.getDocument('your-file.pdf').promise.then(function(pdf) { // 这里处理PDF内容 });
先确认你用的PDF.js版本对应的命名空间,去你下载的PDF.js包里看说明文档,或者直接看脚本文件里的全局变量名。
2. 确认PDF.js脚本的加载顺序
脚本加载顺序错了也会导致这个错误——你得保证PDF.js的脚本在你调用它的代码之前加载完成。比如页面结构得是这样:
<!-- 先加载PDF.js核心脚本 --> <script src="/path/to/pdf.js"></script> <!-- 再写你的自定义调用代码 --> <script> // 这里安全调用pdfjsLib pdfjsLib.getDocument('your-file.pdf').promise.then(...); </script>
如果你是用jQuery的getScript异步加载PDF.js,一定要在回调里再执行调用逻辑,别着急:
$.getScript('/path/to/pdf.js', function() { // 等脚本加载完再干活 pdfjsLib.getDocument('your-file.pdf').promise.then(...); });
3. jQuery 1.10.2背锅吗?大概率不会
jQuery 1.10.2确实挺老,但PDF.js本身不依赖jQuery,所以两者核心逻辑不会直接冲突。不过要注意两个小细节:
- 如果你用了jQuery的
$(document).ready(),要确保PDF.js已经在ready事件触发前加载完成,或者把加载PDF.js的代码放在ready回调里; - 别让jQuery的全局变量和PDF.js的命名空间搞混(不过现在用
pdfjsLib基本不会有这个问题)。
4. 检查CMS的脚本加载限制
有些CMS会搞脚本合并、延迟加载这类优化,可能会把PDF.js的脚本给漏加载了,或者打乱了加载顺序。你可以打开浏览器F12的「网络」标签,看看PDF.js的脚本是不是成功加载了(状态码是200),路径有没有写错,或者CMS有没有禁止加载外部脚本的设置。
总结下:先查命名空间和加载顺序,这俩是90%的概率会出问题的地方。jQuery旧版本大概率不是直接原因,但也要注意加载时机的配合。
内容的提问来源于stack exchange,提问作者Andy Kaufman
相关产品推荐
相关产品推荐

