it-swarm.com.de

HTML-eingebettete PDFs & onload

Ich binde ein PDF in eine Webseite mit dem folgenden HTML ein: -

<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>

Das Laden der PDFs kann etwas langsam sein, daher möchte ich das Objekt ausblenden und eine Lademeldung/GIF anzeigen, bis es vollständig geladen ist, damit der Benutzer keinen leeren Bildschirm sieht.

Alles, was ich wirklich brauche, ist eine Art zu sagen, wann das Objekt vollständig geladen ist. Ich habe das 'Onload'-Ereignis des ausprobiert, aber es scheint nie gefeuert zu werden.

Ich fange an zu denken, dass es vielleicht nicht möglich ist, aber es schadet nie zu fragen ...

27
phil_h

Ich weiß nicht, warum es jeder so schwer macht.

<object data="yourfile.pdf" style="background: transparent url(AnimatedLoading.gif) no-repeat center;" type="application/pdf" />
10
DougB

Der folgende Code funktioniert.

<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>
9
user124118

Ich lade das PDF mit jQuery ajax in den Browser-Cache. Dann erstelle ich ein eingebettetes Element mit Daten, die sich bereits im Browser-Cache befinden.


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();
    }
});

Sie müssen auch Ihre http-Header richtig einstellen.


HttpContext.Response.Expires = 1;
HttpContext.Response.Cache.SetNoServerCaching();
HttpContext.Response.Cache.SetAllowResponseInBrowserHistory(false);
HttpContext.Response.CacheControl = "Private";
7
Pavel Savara

Keine der Empfehlungen ist gültig, da DOM geladen wird, bevor der Inhalt von PDF geladen wird. Daher kann DOM ActiveX-Inhalte nicht steuern

3
Michael
$(document).ready(function() {
   });

würde nicht funktionieren, da dies hauptsächlich auf document.readyState == interactive und nicht auf document.readyState == complete ausgelöst wird.

Wenn Sie einen Timer mit dieser Prüfung (document.readyState == "complete") setzen, würde es definitiv funktionieren!

1
Amir Shahzad
<embed onload='alert("I should be called")'></embed>
0
jmmaniego

Msgstr "Inhalt innerhalb eines Tags wird angezeigt, wenn ein Objekt geladen wird, aber noch nicht fertig ist."

Also steck deinen Spinner rein und es sollte gut für dich funktionieren. Und Sie müssen kein JavaScript schreiben.

src: http://en.wikibooks.org/wiki/XHTML/XHTML_Objects

0
geowa4

Sie wollen so etwas wie die Funktion document.ready() von jQuery. Für Nicht-IE-Browser können Sie einen Handler für das Ereignis DOMContentLoaded registrieren, und Ihre Handlerfunktion wird aufgerufen, nachdem alle Bilder und Objekte geladen wurden. Für IE müssen Sie die Eigenschaft document.readyState kontinuierlich überprüfen und warten, bis sie "complete" lautet.

Wenn Sie jQuery verwenden, haben sie die harte Arbeit für Sie geleistet. Sie müssen also nur Folgendes tun:

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

Wenn Sie jquery nicht verwenden möchten, müssen Sie Folgendes tun:

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
Matt Bridges