2010-01-06 38 views
2

下面的代码很好地工作:复位等待光标与内容处置浏览器:附件

<script type="text/javascript"> 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_initializeRequest(InitializeRequest); 
    prm.add_endRequest(EndRequest); 

    function InitializeRequest(sender, args) { 
     document.body.style.cursor = 'progress'; 
    } 
    function EndRequest(sender, args) { 
     document.body.style.cursor = 'default'; 
    } 
</script> 

当响应返回一个附件,虽然(从ReportViewer控件一个PDF,例如):

Response.AddHeader("Content-Disposition", "attachment; filename=some.pdf") 

EndRequest()永远不会触发,并且“进度”光标不会重置。 一个Javascript调用,例如

ScriptManager.RegisterStartupScript(this, this.GetType(), "close", 
    "parent.EndRequest(...);", true); 

会做的伎俩,但不可能因为内容的处置。 您能否想出一种方法来正确执行此操作 - 在呈现PDF时显示等待光标,并在显示PDF时返回到正常光标?我在这里假设一个C#上下文,但问题不是语言或平台特定的。

回答

2

问题似乎是EndRequest函数没有被触发。你有没有试过看看pageLoading和pageLoaded事件是否正在触发?

我有一种感觉,这些事件不会触发,因为没有任何内容被发送回页面(附件没有以内联文档的方式到达页面)。

我会将文件下载移动到iframe中。这里是一个如何做到这一点的例子:

function InitializeRequest(sender, args) { 
    document.body.style.cursor = 'progress'; 

    var iframe = document.createElement("iframe"); 
    iframe.src = 'your pdf file'; 
    iframe.style.display = "none"; 
    document.body.appendChild(iframe); 
} 

然后你可以访问iframe的onload事件。

编辑:

而且搜索使我this page。它似乎做你想要做的一切。

+0

pageLoaded也没有被触发,这在某种程度上是有道理的,因为响应并没有真正回到浏览器的页面上下文。加载的内容不会取代当前页面。 – cdonner 2010-01-06 02:14:10

+0

请参阅修改后的答案。包括更多细节。 – 2010-01-06 02:27:30

+1

iframe的想法似乎工作。谢谢一堆。 – cdonner 2010-01-06 15:47:56