首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pdf.js不使用Safari

pdf.js不使用Safari
EN

Stack Overflow用户
提问于 2013-06-10 10:45:43
回答 5查看 19.7K关注 0票数 4

我们正在测试pdf.js,虽然这似乎是一个很棒的项目,但我们无法让它在Safari中工作。

(在PDF.JS版本上测试= 0.8.229 (最新)/Safari5.1.9- 6.0.4 / Mac 10.6.8 - 10.8.3)

示例:

这是一个示例示例,演示代码来自我们的服务器,示例PDF可以在Chrome/FFox上工作,而不是Safari:js/test.html

控制台输出:

代码语言:javascript
复制
Warning: Setting up fake worker. 
Error: Invalid XRef stream (while reading XRef): 
Error: Invalid XRef stream pdf.js:850undefined 
Warning: Indexing all PDF objects 
Error: Invalid XRef stream (while reading XRef): 
Error: Invalid XRef stream pdf.js:850undefined

更多测试:

下面是我们测试过的示例PDF列表(它们都是从我们的服务器上提供的,并且都在Chrome/FFox/Android中工作)。唯一与Safari一起工作的是来自pdf.js项目本身的PDF文件:

在SAFARI中失败:

http://samplepdf.com/sample.pdf

http://forums.adobe.com/servlet/JiveServlet/previewBody/2041-102-1-2139/Sample.pdf

https://github.com/prawnpdf/prawn/raw/master/data/pdfs/form.pdf

在SAFARI工作:

http://cdn.mozilla.net/pdfjs/helloworld.pdf

(注:这是一个来自pdf.js项目的PDF样本,也是我们唯一能够工作的项目)

我们已经提交了一个错误报告,但是开发人员似乎没有答案,所以我希望这里的人.

我们如何让pdf.js与Safari一起工作?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-06-15 17:44:59

我已经想出了如何在Mac上工作(不一定理解为什么).

  1. 必须包括compatibility.js
  2. 必须分配PDFJS.workerSrc。 我已经测试过的演示代码(来自JS Bin演示)并不能做到这一点,尽管其他一些在线示例(包括hello示例和@AndrewBenjamin提供的示例-谢谢)也没有做到这一点。其他浏览器似乎不需要这个,但是Safari没有它就不能工作。

再说一遍,无法解释为什么,但这就是我们如何让它为我们工作。

票数 7
EN

Stack Overflow用户

发布于 2013-06-13 22:49:18

在我的本地服务器上,PDF.js在Safari中工作得很好,但是当我把它放在远程服务器上时,愚蠢的错误又回来了:

警告:设置假工人。 未处理的拒绝:错误: INVALID_STATE_ERR: DOM异常11

如果我碰巧打开了开发人员控制台,它也会在我的本地计算机上显示这个错误。关闭控制台,PDF显示在Safari中;打开控制台,它就不再工作了。

问题是:与运行在本地服务器上的开发工具和远程服务器相比,开发人员工具和远程服务器更改了什么?这仍然是一个范围检查问题吗?

不过,我让PDF.js工作了!我修改了那么多东西,我不知道我做了什么工作。这是我做过的事情的清单。

  1. 添加了compatibility.js -修改了其中的最后一个函数如下: (函数checkRangeRequests() { var isSafari = 0;if (!isSafari) {isSafari;} document.addEventListener('DOMContentLoaded',函数(e) { if (isSafari) { PDFJS.disableRange = true;});})();
  2. 更改了xhr.open()调用在pdf.js中的顺序,使xhr.setRequestHeader()出现在xhr.open()之后
  3. 删除所有'use strict';
  4. 在第37272和41262行的xhr.setRequestHeader("Cache-control", "no-cache");后添加了xhr.open
  5. 小型化的pdf.js和所有的工作时间!
票数 3
EN

Stack Overflow用户

发布于 2013-06-15 01:58:04

PDFJS.getDocument()将接受字符串链接或Uint8Array。在我的客户端版本中,我传递PDFJS.getDocument()一个Uint8Array,但是如果我想要呈现一个现有的文件,我只需将路径传递到该文件:

jspdf第965行:

代码语言:javascript
复制
PDFJS.getDocument('..files/pdf/sample.pdf').then(function(pdf) {

我不知道是什么使您的safari浏览器失败,但是如果您可以在我的试验场地上看到试验场地,您必须非常接近解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17022052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档