2010-01-06 43 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