HTML嵌入式PDF&负载

时间:2009-07-16 14:57:33

标签: html pdf embed

我正在使用以下html在网页中嵌入PDF: -

<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 个答案:

答案 0 :(得分:13)

我不知道为什么每个人都这么努力。

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

答案 1 :(得分:9)

以下代码有效。

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

答案 2 :(得分:7)

我正在将带有jQuery ajax的PDF加载到浏览器缓存中。然后我用浏览器缓存中的数据创建嵌入式元素。


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 :(得分:3)

所有建议都无效,因为在加载PDF内容之前加载了DOM。所以DOM无法控制ActiveX内容

答案 4 :(得分:1)

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

无效,因为这主要是document.readyState == interactive而不是document.readyState == complete

如果您使用此检查(document.readyState == "complete")放置计时器,那肯定会有效!

答案 5 :(得分:0)

“当加载对象但尚未完成时,会显示标记内的内容。”

所以把你的微调器放在那里,它应该很适合你。而且你不必编写任何JavaScript。

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

答案 6 :(得分:0)

你会想要类似jQuery的document.ready()函数。对于非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();

答案 7 :(得分:0)

<embed onload='alert("I should be called")'></embed>