iOS 7 (и новее) не может открыть PDF в новом окне браузера

У меня большие проблемы с jsPDF, так как существует iOS7. Мы разработали веб-приложение и использовали jsPDF для создания PDF-файлов на лету. Мы открываем PDF-файл в новом окне Safari, чтобы пользователь получил доступ к Adobe Reader для отправки PDF-файла по почте или других действий. В iOS6 это не было проблемой, но в iOS7 вы не можете открывать data:application/pdf;base64 ссылки в новом окне! Обратите внимание, что это происходит только в том случае, если вы добавите веб-приложение на рабочий стол.

Если у кого-то есть решение, обходной путь или другая полезная информация, я был бы рад услышать.


person atroy    schedule 07.01.2014    source источник


Ответы (2)


Есть решение!! Создайте файл html (например, pdf.html) и добавьте

<!DOCTYPE html><html>
<head>
    <title></title>
</head>
<body>
<script>
    document.location.href = document.location.hash.substr(1);
</script>
</body>
</html>

Создать ссылку

<a class="btn btn-default" id="pdfData" ng-show="isMobile && pdfReady" ref="app/views/pdf.html" target="xxx">
Download PDF
</a>

После того, как вы «рендерите» свой PDF-файл, получите datauristring и добавьте его к своей ссылке как хэш.

var pdfData = doc.output('datauristring');
var element = document.getElementById('pdfData');
element.href = "app/views/pdf.html#" + pdfData;
element.target = "xxx";
$scope.pdfReady = true; // show download link

И теперь, если пользователь щелкает ссылку для загрузки, в сафари открывается новое окно, и отображается PDF-файл.

person atroy    schedule 07.02.2014
comment
это ref или href при создании ссылки? ‹a class=btn btn-default id=pdfData ng-show=isMobile && pdfReady href=app/views/pdf.html target=xxx› Скачать PDF ‹/a› - person Rohit; 30.07.2015

Вы пробовали использовать doc.output('dataurlnewwindow')?

Если это не сработает, вы можете создать новый маршрут, например /pdf/download?data=base64data..., и ответить на pdf-файл с помощью Content-Type: application/pdf и на основе заданных данных параметра. Обязательно избегайте возможных проблем с безопасностью, чтобы никто другой не мог предоставить pdf-файлы с вашим URL-адресом.

person oncode    schedule 04.02.2014
comment
Из справочника JsDoc единственными возможными параметрами для вывода () являются: dataurlstring (псевдоним datauristring) и datauri (псевдоним dataurl). - person Salvatore Zappalà; 12.02.2015
comment
@SalvatoreZappalà это не точно, если вы проверите код, который есть dataurlnewwindow, см. строку 1517 на rawgit.com/MrRio/jsPDF/master/docs/jspdf.js.html - person mtpultz; 20.11.2018
comment
dataurlnewwindow работает для новой вкладки рабочего стола, но не для мобильных устройств. - person geoidesic; 13.07.2021