HTML встроенный PDF и загрузки - PullRequest
27 голосов
/ 16 июля 2009

Я встраиваю PDF в веб-страницу со следующим html: -

<object id="pdf" classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="1024" height="600">
    <param name="SRC" value="/GetDoc.ashx?SOID=<%=Html.Encode(Model.OrderID)%>" />
    <embed src="/GetDoc.ashx?SOID=<%=Html.Encode(Model.OrderID)%>" width="1024" height="600">
        <noembed> Your browser does not support embedded PDF files. </noembed>                     
    </embed>
</object>

Загрузка PDF может быть немного медленной, поэтому я хотел бы скрыть объект и отображать загрузочное сообщение / gif до полной загрузки, чтобы пользователь не смотрел на пустой экран.

Все, что мне действительно нужно, это способ узнать, когда объект полностью загружен. Я пробовал событие onload, но, похоже, его никогда не уволили.

Я начинаю думать, что это возможно, но спрашивать никогда не больно ...

Ответы [ 8 ]

13 голосов
/ 31 декабря 2011

Я не знаю, почему все делают это так сложно.

<object data="yourfile.pdf" style="background: transparent url(AnimatedLoading.gif) no-repeat center;" type="application/pdf" />
10 голосов
/ 23 января 2010

Следующий код работает.

<div style="background: transparent url(loading.gif) no-repeat">
<object height="1250px" width="100%" type="application/pdf" data="aaa.pdf">
<param value="aaa.pdf" name="src"/>
<param value="transparent" name="wmode"/>
</object>
</div>
7 голосов
/ 16 августа 2012

Я загружаю PDF с jQuery ajax в кеш браузера. Затем я создаю встроенный элемент с данными уже в кеше браузера.


var url = "http://example.com/my.pdf";
// show spinner
$.mobile.showPageLoadingMsg('b', note, false);
$.ajax({
    url: url,
    cache: true,
    mimeType: 'application/pdf',
    success: function () {
        // display cached data
        $(scroller).append('<embed type="application/pdf" src="' + url + '" />');
        // hide spinner
        $.mobile.hidePageLoadingMsg();
    }
});

Вы также должны правильно установить заголовки http.


HttpContext.Response.Expires = 1;
HttpContext.Response.Cache.SetNoServerCaching();
HttpContext.Response.Cache.SetAllowResponseInBrowserHistory(false);
HttpContext.Response.CacheControl = "Private";
3 голосов
/ 09 ноября 2009

Ни одна из рекомендаций не действительна, поскольку DOM загружается до загрузки содержимого PDF. Поэтому DOM не может контролировать содержимое ActiveX

1 голос
/ 13 августа 2012
$(document).ready(function() {
   });

не будет работать, так как это срабатывает в основном на document.readyState == interactive, а не на document.readyState == complete.

Если вы поставите таймер с этой проверкой (document.readyState == "complete"), он обязательно сработает!

0 голосов
/ 28 октября 2015
<embed onload='alert("I should be called")'></embed>
0 голосов
/ 16 июля 2009

Вам понадобится что-то вроде функции document.ready() в jQuery. Для браузеров не IE вы можете зарегистрировать обработчик для события DOMContentLoaded, и ваша функция обработчика будет вызвана после загрузки всех изображений и объектов. Для IE вы должны постоянно проверять свойство document.readyState и ждать, пока оно будет "complete".

Если вы используете jQuery, они сделали для вас тяжелую работу, поэтому все, что вам нужно сделать, это:

$(document).ready(function() {
    //take away the "loading" message here
});

Если вы не хотите использовать jquery, вам нужно сделать что-то вроде:

addEventListener('DOMContentLoaded', function() { 
    //take away the "loading" message here
});

function waitForIE() {

    if (!document.all) return;

    if (document.readyState == "complete") {
        //take away the "loading" message here
    }
    else {
        setTimeout(waitForIE, 10);
    }
}

waitForIE();
0 голосов
/ 16 июля 2009

"Содержимое внутри тега отображается, когда объект загружается, но еще не завершен."

Так что положите туда свой счетчик, и он должен хорошо сработать для вас. И вам не нужно будет писать JavaScript.

Источник: http://en.wikibooks.org/wiki/XHTML/XHTML_Objects

...