Проблемы с загрузкой PDF в Chrome IOS
Мы получаем следующее сообщение от Chrome при загрузке (или попытке загрузки) PDF файла в нашем мобильном веб-приложении.
"Предупреждение: что-то не так прямо здесь!... Сайт, к которому вы пытаетесь получить доступ, действует странно, и Chrome не может проверить правильность URL-адреса."
Это отлично работает в Safari и, по сути, мы это делаем.
- При загрузке сделайте вызов, чтобы проверить, что документ, который мы хотим показать, в порядке.
- если документ не соответствует сообщению пользователя, а затем закрывает вкладку
- Направьте вкладку, чтобы перейти к адресу, который загружает PDF.
Без размещения слишком большого кода Javascript выглядит примерно так:
DoRequest ("print_report",
"VALIDATE",
mycallback);
function mycallback (data,error) {
var h_href = "";
var h_widget = "";
if(error == true) {
window.close();
return;
}
h_href = GenerateHREF( "print_report", "PRINT" );
window.location.href = h_href;
}
URL-адрес, предоставленный GenerateHREF, предназначен для одного исходного сайта и относится к оригиналу.
тип mime устанавливается в application/pdf.
Содержимое-расположение установлено в строку. Я также попытался настроить заголовок размера содержимого, но он, похоже, не имеет никакого эффекта.
Content-Disposition: attachment; filename="pp66.26.pdf"
Content-Length: 31706
Content-Type: application/pdf
Мне что-то не хватает... только что?
Ответы
Ответ 1
Попробуйте разобрать документ на base64 и добавить в свой документ или iframe.
function getAsyncBase64(fileName, callBack){
var xhr = new XMLHttpRequest();
xhr.open('GET', fileName, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function (e) {
if (this.status == 200) {
var uInt8Array = new Uint8Array(this.response || this.responseText);
var i = uInt8Array.length;
var binaryString = new Array(i);
while (i--) {
binaryString[i] = String.fromCharCode(uInt8Array[i]);
}
var dataBinary = binaryString.join('');
var data64 = window.btoa(dataBinary);
callback(data64);
}
xhr.send();
};
function callback(base64){
window.open(base64, "_blank");
//or
iframe.src = "data:application/pdf;base64,"+ base64;
};
getAsyncBase64(url,callback);
Ответ 2
Если это проблема с всплывающим/загружаемым файлом, вы можете показать его с помощью iframe?
<iframe src="downloads/report.pdf"></iframe>
Ответ 3
Я также думаю, что всплывающее поведение, вероятно, является высоким в списке подозреваемых (в частности, window.close(); строка кажется довольно подозрительной, особенно если всплывающее окно заблокировано пользователем).
Однако, поскольку конечной целью является загрузка файла, вы можете попробовать изменить заголовки ответов на
Content-Disposition: attachment; filename="pp66.26.pdf"
Content-Length: 31706
Content-Type: applicaton/octet-stream
или вы можете попытаться заставить все pdf файлы в определенной папке принудительно загрузить файл через .htaccess, а затем просто привязать к ним через location.href вы используете:
<FilesMatch "\.pdf$">
ForceType applicaton/octet-stream
Header set Content-Disposition attachment
</FilesMatch>