当前位置: 代码网 > it编程>前端脚本>Vue.js > vue-pdf打包后无法预览问题及修复方式

vue-pdf打包后无法预览问题及修复方式

2024年05月18日 Vue.js 我要评论
起因早上上班同事跟我说本地测试无误提交到线上的pdf预览下载功能在服务器上预览白屏让我看一下问题。捉虫:找不同开始排查问题,发现异常提示:pro:dev:dev虽有报错但是正常显示,无伤大雅,pro无

起因

早上上班同事跟我说本地测试无误提交到线上的pdf预览下载功能在服务器上预览白屏让我看一下问题。

捉虫:找不同

开始排查问题,发现异常提示:

  • pro:

  • dev:

dev虽有报错但是正常显示,无伤大雅,pro无报错但是显示失败

1.路径问题?

  • 开始面向百度编程:发现网上有人有过打包后预览失败问题,是因为worker.js路径问题。
  • 但是区别是会有个404的报错,这边先不管试了再说,发现失败。

2.不起眼的报错

  • 搜了百度、google,都没发现其他相关的解决方案,看来只能靠自己了。
  • 首先从不起眼的warning开始找起。 

warning: docexception - expected a valid error.

然后打印了一下src的值,发现一个有意思的东西

pendingoperation = pendingoperation.then(function() {
 		var loadingtask;
 		if ( ispdfdocumentloadingtask(src) ) {

 			if ( src.destroyed ) {

 				emitevent('error', new error('loadingtask has been destroyed'));
 				return
 			}

 			loadingtask = src;
 		} else {

 			loadingtask = createloadingtask(src, {
 				onpassword: function(updatepassword, reason) {

 					var reasonstr;
 					switch (reason) {
 						case pdfjs.passwordresponses.need_password:
 							reasonstr = 'need_password';
 							break;
 						case pdfjs.passwordresponses.incorrect_password:
 							reasonstr = 'incorrect_password';
 							break;
 					}
 					emitevent('password', updatepassword, reasonstr);
 				},
 				onprogress: function(status) {

 					var ratio = status.loaded / status.total;
 					emitevent('progress', math.min(ratio, 1));
 				}
 			});
 		}
 		console.log(loadingtask)
 		return loadingtask.promise;
 	})
 	.then(function(pdf) {

 		pdfdoc = pdf;
 		emitevent('num-pages', pdf.numpages);
 		emitevent('loaded');
 	})
 	.catch(function(err) {
 		console.log(err)
 		clearcanvas();
 		clearannotations();
 		emitevent('error', err);
 	})
  • pro:

  • dev:

既然走到rejected里了,那就看看报错提示,刚好有打印

wtf?!线索到这里就断了。

但是,有一个忽略的细节,没错,那个warning,通常warning都不算错,基本都是选择性忽略,这次没有任何问题只能取看看这个了。

首先全局搜索,发现报错提示在这:

pdfjs-dist>es5>build>pdf.js 14109

然后发现reason为undefined,打印ex

报错信息:

“failed to set the ‘responsetype’ property on ‘xmlhttprequest’: the response type cannot be changed for synchronous requests made from a document.”

一番找,终于把真实的报错信息找到了真实的报错信息【枚举报错信息居然没做兜底!】

接下来就简单了,找到出问题的地方:

pdfjs-dist>es5>build>pdf.js 25685

xhr.open("get", this.url);     
xhr.open("get", this.url,true);

加上true即可

再进行测试,pro版本和dev版本一致了成功预览

修复bug

既然问题找到了,修改后测试无误,那就使用npx打个补丁

npx patch-package pdfjs-dist

执行完成会生成一个patches文件夹,里面有个这样的文件。

最后在 package.json 的 scripts 中加入

"scripts": {
 	"postinstall": "patch-package"
}

总结

搞定!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com