Javascript 移动应用程序中的PDF.JS访问控制允许源问题
我正在尝试使用Sencha和Cordova为移动设备开发一个应用程序。由于Android浏览器中没有PDf支持,我决定使用PDf.JS。它在加载本地PDf文件时工作正常,但在尝试打开远程文件时会抛出错误Javascript 移动应用程序中的PDF.JS访问控制允许源问题,javascript,cordova,sencha-touch,pdf.js,Javascript,Cordova,Sencha Touch,Pdf.js,我正在尝试使用Sencha和Cordova为移动设备开发一个应用程序。由于Android浏览器中没有PDf支持,我决定使用PDf.JS。它在加载本地PDf文件时工作正常,但在尝试打开远程文件时会抛出错误 http://<remote server pdf location>. Origin file:// is not allowed by Access-Control-Allow-Origin http://。访问控制不允许原始文件:/。允许原始文件 请让我知道如何解决这个问题
http://<remote server pdf location>. Origin file:// is not allowed by Access-Control-Allow-Origin
http://。访问控制不允许原始文件:/。允许原始文件
请让我知道如何解决这个问题。有没有办法在PDF.JS中解决这个问题。我只需要本地PDF.Js文件,因为应用程序也需要脱机功能
提前感谢PDF.js使用WebWorkers下载文档时出现问题。WebWorkers中的CORS在浏览器中是一团混乱。(无论如何,CORS是一团糟。) 以下情况将不起作用:
解决方案:自己使用响应类型arraybuffer进行ajax操作,然后将响应反馈到PDF.js:
.success(function(buffer){
PDFJS.getDocument(buffer);
})
不要使用URL调用
PDFJS.getDocument
,首先通过XMLHttpRequest获取二进制数据,然后将结果传递给getDocument
调用以代替URL。这将避免在Cordova应用程序中运行时PDFJS库所固有的问题
以下代码示例取自此处的pdfJs示例:。在customview.js
替换此代码:
使用此代码:
这样你就可以打电话:
而不是:
我用一个简单的方法解决了这个问题,打开你的pdf.js代码,然后首先用。现在,将所有代码复制到代码编辑器并搜索字符串“无法加载” 然后您将看到类似这样的代码 现在,您必须添加
i.setRequestHeader(“Origin”,window.location.hostname)代码>之后
const i=新的XMLHttpRequest代码>(347行)
最终代码如下所示
请注意,在348处新增了一行
现在,保存它,您就可以开始了!!否,CORS有问题:)不工作,仍被CORS策略阻止:请求的资源上不存在“访问控制允许来源”标头。
/* ---- customview.js ----- */
PDFJS.getDocument(url)
.then(function getPdfHelloWorld(_pdfDoc) {
pdfDoc = _pdfDoc;
renderPage(pageNum);
});
/* ---- customview.js ----- */
function callGetDocment (response) {
// body...
PDFJS.getDocument(response).then(function getPdfHelloWorld(_pdfDoc) {
pdfDoc = _pdfDoc;
renderPage(pageNum);
});
}
function getBinaryData (url) {
// body...
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
//binary form of ajax response,
callGetDocment(e.currentTarget.response);
};
xhr.onerror = function () {
// body...
alert("xhr error");
}
xhr.send();
}
var url = 'http://nodetuts.com/pdf/handson-nodejs-sample.pdf';
getBinaryData(url); //call this fn on page load
var url = 'http://nodetuts.com/pdf/handson-nodejs-sample.pdf';
PDFJS.getDocument(url);