PDF.js v1.8.188 (build: ad1023ff)
Message: file origin does not match viewer's
4.注意
1.如果web服务器是iis,请添加.properties的MIME类型为application/octet-stream, 否则本地化无法启用,默认语言为英文。
2.pdf.js是不支持跨域文件加载的,比如你的页面地址为http://www.a.com, pdf地址为:http://www.b.com/my.pdf。 直接加载是不会成功的。会报 “file origin does not match viewer”错误。
分析一下源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | var validateFileURL; var HOSTED_VIEWER_ORIGINS = [ 'null', 'http://mozilla.github.io', 'https://mozilla.github.io' ]; validateFileURL = function validateFileURL(file) { try { var viewerOrigin = new URL(window.location.href).origin || 'null'; if (HOSTED_VIEWER_ORIGINS.indexOf(viewerOrigin) >= 0) { return; } var fileOrigin = new URL(file, window.location.href).origin; if (fileOrigin !== viewerOrigin) { throw new Error('file origin does not match viewer\'s'); } } catch (e) { var message = e && e.message; var loadingErrorMessage = mozL10n.get('loading_error', null, 'An error occurred while loading the PDF.'); var moreInfo = { message: message }; PDFViewerApplication.error(loadingErrorMessage, moreInfo); throw e; } }; |
首先,如果Viewer.html所在的主机是否在HOSTED_VIEWER_ORIGINS列表中定义,如果定义,则以下不检查同源。如果不存在,则检查同源。因此可以在将viewer.html所在的主机加到HOSTED_VIEWER_ORIGINS中即可实现跨域。 这样做比较安全。第2029行
如果部署觉得麻烦,暂不考虑安全性的话,可以在开头设置一个跨域标识位:
var CORS = true;表示支持跨域,不进行同源判断。
var CORS = true;表示不支持跨域,进行同源检测。