2015-01-20 2 views
1

Мне поручено использовать PDFjs в локальной среде. Все работает отлично, до того, что я могу использовать абсолютные пути для PDF-файлов, чтобы обойти ту же политику происхождения, и в Firefox, просмотр локального PDF как этогоСделайте работу pdfjs над локальными файлами

<iframe class="pdf-viewer" src="viewer.html?file=file:///c/work/example-files/pdf/test.pdf"></iframe> 

работает просто отлично. Проблема заключается в том, что, как только я попытаюсь сделать то же самое в Internet Explorer, я получаю сообщение об ошибке getItem неопределенной или нулевой ссылки.

Это связано с тем, что при использовании локальной файловой системы в Internet Explorer localStorage является undefined.

Есть ли способ сделать PDFjsне использовать локальное хранилище, так что это работает в IE, тоже?

ответ

2

К сожалению, IE имеет ограниченную поддержку, и если вы используете версию, которая не соответствует HTML5, вам необходимо включить compatibility.js, который имеет polyfills для отсутствующих функций

https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#faq-support

https://github.com/mozilla/pdf.js/wiki/Required-Browser-Features

Если вы действительно хотите, чтобы получить более глубокие и обрабатывать этот сценарий, вы можете попробовать изменить код pdf.js самого

https://github.com/mozilla/pdf.js

2

pdf.js делает очень умное использование HTTP GET запросов с range заголовками только загрузили части файла (случайный доступ к файлу), который когда-файл был загружен один раз, выполнены полностью из кэша браузера You может наблюдать этот эффект, смотря на вкладку сетевого монитора, то, что выглядит как несколько запросов для одного и того же файла, действительно представляет собой несколько запросов с разными байтовыми диапазонами. Таким образом, чтобы загрузить страницу 123 документа на 450 страниц, он должен смотреть только на определенный диапазон байтов и не хранить весь файл в памяти браузера.

Очевидно, что с файлом: // отсутствует кеш браузера, поэтому он должен помещать данные файла где-то, для огромных PDF-файлов, он просто не может хранить все это в памяти. Таким образом, требование для localstorage. Если бы вы знали наверняка, что все ваши файлы PDF будут вписываться в память, вы можете написать полисполку localstorage, которая сохраняет данные PDF в памяти, а не в true localstorage. Тем не менее, вы будете довольно ограничены памятью в 32-битном браузере.

Смежные вопросы