Потоковая передача PDF в iframe с использованием dataurl – работает только в Chrome

В Chrome работает следующее, но содержимое iframe пустое в Firefox 15 и IE 9.

<html> <head></head> <body> <p>this n that</p> <iframe type="application/pdf" width="95%" height="95%" src="data:application/pdf;base64,<?php echo base64_encode(file_get_contents('memlist.pdf'));?>"> Oops, you have no support for iframes. </iframe> <p>this n that</p> </body> </html> 

Проблема, по-видимому, связана с dataurl. Если я изменю его просто на src = "memlist.pdf", то он работает повсюду. Размер PDF составляет 75 КБ.

Существуют ли некоторые (текущие) ограничения браузера с dataurls?

(Я пытаюсь избежать обратного вызова на сервер с http-адресом из-за некоторых осложнений аутентификации)

Я только что скопировал ваш источник дословно, заменив раздел, где php выводит закодированный pdf-файл для строки, которую я получил из онлайн-кодировщика.

Необработанный pdf-файл составляет 141 кбайт, а закодированная строка – 194 065 байт – такая большая, как URL-адрес.

В Chrome он работал отлично, как и для вас. Точно так же у Opera не было бы этого.

Итак, я удалил атрибут type = 'application / pdf' из тега iframe. Теперь Chrome и Opera будут отображать файл, в то время как IE9 все еще отказывается.

Я попытался изменить src через javascript (на всякий случай), без проблем с ним через Opera / Chrome, но по-прежнему не нужно работать с IE.

Раньше я создавал pdf-файлы «на лету» с php и просто устанавливал src iframe как URL-адрес файла php, в комплекте с параметрами GET. Это отлично работало с IE6 (и опера, хром и ff – никогда не пробовали его на мобильном устройстве, это было более 5 лет назад)

Какой-то старый, пример кода, который, я надеюсь, поможет:

(1) Javascript для вставки iframe

 function showPdfTt(studentId) { var url, tgt; title = byId("popupTitle"); title.innerHTML = "Timetable for " + studentId; tgt = byId("popupContent"); url = "pdftimetable.php?"; url += "id="+studentId; url += "&type=Student"; tgt.innerHTML = "<iframe onload=\"centerElem(byId('box'))\" src='"+url+"' width=\"700px\" height=\"500px\"></iframe>"; } 

Выходной раздел pdfTimetable.php

 $pdfStr = $pdf->output(); $myFile = fopen("lastRequested.pdf", "wb"); // just here for debugging purposes fwrite($myFile, $pdfStr); fclose($myFile); $pdf->ezStream(); // send output to stdout (the browser) - uses fpdf for generation exit; 

Выходной раздел fpdf

  if(php_sapi_name()!='cli') { //We send to a browser header('Content-Type: application/pdf'); if(headers_sent()) $this->Error('Some data has already been output, can\'t send PDF file'); header('Content-Length: '.strlen($this->buffer)); header('Content-Disposition: inline; filename="'.$name.'"'); header('Cache-Control: private, max-age=0, must-revalidate'); header('Pragma: public'); ini_set('zlib.output_compression','0'); } echo $this->buffer; break;